Changelogs
UI App Changelog
Changelog for Laioutr UI App (@laioutr-app/ui) following Keep a Changelog and Semantic Versioning.
All notable changes to Laioutr UI App (@laioutr-app/ui, the Studio Sections and Blocks composed via defineSection / defineBlock) are documented here, following Keep a Changelog and Semantic Versioning.
2.3.0
Added
BlockProductDetailEnergyLabelfor the Product Detail page. Renders the EU energy efficiency label — an inline energy-class badge (opening the full label in a lightbox) and an optional product data sheet link next to the product information. The block reads a new per-variantProductVariantEnergyLabelcanonical component (badge, label, title, energy class, EPREL registration number, data sheet link). It is non-standalone and placeable in the Product Detail section. Until platform adapters implement the resolver, the block is placeable but renders nothing in storefronts.BlockProductDetailRatingfor the Product Detail section. Renders the product's average star rating, the rating value (x/maxRating), and the review count. The product detail query now fetches theProductRatingcomponent so any PDP block can readproduct.components.rating.SectionGlossaryList, with a newglossaryQueryshared field. Renders a shared alphabetical index of name + link entries, sourced either from a bound Hygraph data source (any app registering aGlossaryentity) or from a manually authoreditemsarray. A configurableheadingfield falls back to a locale-aware default when left empty.SectionLocationFinder,SectionLocationDetail, andBlockLocationCard.SectionLocationFinderresolves locations via the new canonicalLocationentity and renders a finder with a configurable heading, container style, and Google Maps Map ID; it also exposes alocationCardsslot for manually curatedBlockLocationCardinstances merged into the same list and map.SectionLocationDetailrenders the full location page — map, header, image gallery, info list, and a rich description.BlockLocationCardis non-standalone (only usable insideSectionLocationFinder'slocationCardsslot); cards without coordinates are silently dropped. Both sections read the Google Maps API promise fromuseNuxtApp().$googleMapsApiand render inert until the storefront registers that plugin.SectionPromotionBanner, registered in theBannerstemplate list. WrapsPromotionBannerfor canonical margin / padding / container-style chrome, with Content (heading, subline, icon, code button, CTA, countdown) and Design (styling + layout) panels. The promotion banner is configured directly on the Section — there is noBlockPromotionBanner.
Changed
- The
media/backgroundImage/bannerImagefields of the banner and media sections and blocks now accept bothimageandvideoassets (previously image-only). Affected:BlockBannerBasic,BlockBannerIntegrated,BlockBannerShowcase,BlockCategoryCard,SectionBannerBasic,SectionBannerIntegrated,SectionBannerShowcase,SectionBrandHero(background only),SectionMediaText,SectionProductSliderShowcase.SectionPageNotFoundstays image-only (it renders the asset as a CSSbackground-image, not via<Media>). - Editors can now choose a link
target(_self/_blank, default_self) in Studio across single-link Blocks and Sections, via the newlinkTargetOptionsshared field. NewTargetfields onBlockButton,BlockCategoryCard,BlockLogoSliderSlide; per-itemTargetonSectionBrandList.brandLinksandSectionTopBar.informationLinks;Logo Link TargetonSectionHeaderBasicandSectionHeaderShop. Existing configurations are unchanged — the runtime default_selfmatches prior behaviour. - Breaking (
SectionBrandList): thebrandLinksschema field is renamed toitems, and a newheadingtext field is added. BothSectionBrandListandSectionGlossaryListnow render the shared alphabetical index;SectionBrandListkeeps the optional count. Stored configurations referencing the oldbrandLinksname will not migrate automatically.
2.2.2
Changed
- Breaking:
BackgroundAwareButton's adaptive lookup variants are nowadaptive-primary/adaptive-secondary/adaptive-ghost(previouslyprimary/secondary/ghost), so they no longer shadowButton's literalprimary/secondaryvariants. The newbackgroundAwareButtonFieldsshared field exposes the threeAdaptive *options alongside the literalButtonVariantoptions, and every section and block with a CTA now uses it — including the header, footer email button, 404 page, and pricing-plan card, whose CTAs newly adapt to their surrounding surface tone. Editors opt into per-surface remapping by picking anAdaptive *option.
Custom themes overridingbackgroundAwareButtonsindefineTheme/extendThememust rename their map keys (light:light:primary→light:light:adaptive-primary, same forsecondaryandghostacross all combinations). Stored Studio CTAs where an editor previously picked "Primary" or "Secondary" will, after upgrade, render as the literal Button variant — the per-surface remap is no longer applied unless the editor re-selects anAdaptive *option.
2.2.1
Changed
- Caption styling on
BannerBasicnow offers a plain/boxed variant, colour scheme, and text-shadow controls, bundled into a single sidebar group via the newcaptionVariantFieldshared field onBlockBannerBasicandSectionProductSliderShowcase. CTA banners in full-width containers now own their own border-radius.
Breaking (SectionProductSliderShowcase): the schema replacescaptionStyle.colorwithcaptionVariant. Existing pages with values stored undercaptionStylesilently drop them on next save — re-author the caption styling via the new Variant panel in Studio. - Breaking — sizing-system consolidation. A new
Sizerprimitive and matchingsizingFieldshared schema route outer-box sizing through one consistent control. Banner blocks (BlockBannerBasic,BlockBannerIntegrated,BlockBannerShowcase) plusBlockMediaandBlockIframenow useSizerinstead of bespoke per-block fields. Banner blocks also gain vertical content alignment.BlockMediadrops itsaspectRatio,height, andorientationschema fields;BlockIframedropsdesktopHeightandmobileHeight. Existing pages with values stored under these names silently drop them on next save — author the desired height via the newsizingfield in Studio.
2.2.0
Added
SectionContentGrid— hybrid slot/query wrapper.dataSource: 'slot'(default,BlockCardvia thedefaultslot) ordataSource: 'query'(auto-populated from a blog post collection).- Studio preview images (
previewSrc) for 31 blocks (plus 2 refreshed). Editors browsing the block picker now see a representative illustration for each placeable element. - Editors can now pick a button size per CTA (
xs/s/m/l, defaultm) across every section and block via thebuttonFieldsSize selector, plus a newbuttonSizeOptionsexport for inline use. Existing CTAs render unchanged unless a size is explicitly picked. - Every section and block with a configurable heading or subline now exposes an HTML-element selector (
H1–H6/DIVfor headings;P/H1–H6/DIVfor sublines) directly next to the field, replacing the separate bottom "SEO" panel. Newly available on 13 sections and 7 blocks. Section defaults: headingh2, sublinediv. Block defaults: headingh3, sublineh4. BlockHeroSliderSlidegains per-element text-shadow controls (caption, heading, subline;none/soft/strong, defaultnone) and per-slide text-size controls for heading and subline (S/M/L; defaults headingl, sublinem). Existing stored slides render unchanged.SectionFootergains two Design → Layout fields: Logo Position (top/bottom, defaulttop) and Logo Alignment (left/center/right, defaultleft, shown only when position isbottom). Defaults preserve current rendering.SectionBannerBasic,SectionBannerShowcase, andSectionBannerIntegratedgainmargin/padding(Design → Layout) andbackground/customBackground(Design → Styling) fields. Editors can picknone/pale/solid/default/customas the section background. Each section now wraps its banner in a<Backdrop>carrying the resolved background and spacing.- A new Section Background field-pair (
sectionBackground+customSectionBackground) on every section that exposes acontainerStyle+backgroundconfig (17 sections). It paints the edge-to-edge band around a boxed container — visible only inboxedmode, hidden infull-width. Defaults preserve current rendering. SectionNewsletterRegistrationgainscaption(text) andbody(richtext) Content-panel fields, matchingBlockText.
Changed
- Breaking (
SectionProductSlider,SectionProductSliderShowcase): these sections lose their dedicated "SEO" fieldset; the heading element is now stored atheadingStyle.elementinstead of top-levelheadingElement. Anyone with storedheadingElementvalues on these two sections must re-pick the heading element in Studio once. - Breaking (
HeaderBasicMenu→MenuBasic): the generic basic navigation menu (used by bothSectionHeaderBasicandSectionHeaderShop) is renamed and moved out of theHeaderBasic/folder. The wrapping blockBlockMenuHeaderBasicis renamed toBlockMenuBasic(Studio label'Basic Header Menu'→'Basic Menu'). Stored project configurations that reference this block by name need a one-time migration. - Breaking (
BlockButton): the singleiconfield is replaced byiconLeftandiconRight. Stored configs using the oldiconkey must migrate toiconRightto preserve the original right-aligned visual. A newwidthfield (hugdefault /fill) is added, and the schema is reorganized into Content and Design panels. - Breaking (
SectionNewsletterRegistration): the staticmediaschema field is replaced with amediablock-slot accepting one ofBlockMedia,BlockText,BlockCard, orBlockButton. Stored configs that used the oldmedia: { ... }value will not auto-migrate; if no block is placed, the content side spans the full section width. SectionContentSlidernow accepts the three banner blocks (BlockBannerBasic,BlockBannerIntegrated,BlockBannerShowcase) andBlockTextin its slot, alongside the existingBlockCard/BlockMedia.SectionProductSlidernow exposes the standardbackgroundandcustomBackgroundcontrols in Design → Styling.- Rewrote
studio.label,description, andtagsfor all 36 sections and 37 blocks so the copy reads naturally to UX designers and e-commerce managers in Studio — removing implementation jargon and giving several blocks clearer labels (e.g.BlockIframe→ "Embedded Page",BlockMedia→ "Image or Video",BlockProductDetailCartButton→ "Add to Cart",BlockText→ "Text Block"). No runtime behavior change.
Fixed
SectionMediaTextcustom background. When an editor picked a custom color, nothing rendered because the value was passed to a non-existent prop. The custom color is now resolved intobackgrounddirectly. Preset values (none,pale,solid,default) keep working unchanged.
Removed
- The strawberry-field theme.
2.1.0
Added
- First-class block versions of the banner trio —
BlockBannerBasic,BlockBannerIntegrated,BlockBannerShowcase(previously only available asSectionBanner*).BlockBannerBasicgains an optionalaspectRatiofield. SectionCategoryCardSlidergains an optionalctafield, rendered as a button in the slider heading area.SectionProductSliderShowcasegains an optionalbannerTextSizefield (s/m/l, defaultm).
Changed
SectionContentSliderremoved a cosmetic hardcoded surface-tone binding; surface tone now derives from the outerBackdropas intended. No rendering change.
2.0.0
Large coordinated refactor across the UI layer. The entries below cover the Studio-facing Section and Block changes; many require migrating stored Studio configurations.
Added
- New sections:
SectionContentGrid(hybrid slot/query),SectionEditorialGrid,SectionCategoryCardGrid,SectionProductReviews(replacing the legacy block-level implementation).SectionContentSlideradopts a hybrid slot/query data source (defaultslot).SectionUspBanneris reshaped: it dropsbannerStyleandcolors(moved to top-levelcolor/iconColor) and extracts itsusps[]into a newitemsslot populated byBlockUspBannerItem. - New blocks:
BlockCategoryCardandBlockUspBannerItem(non-standalone children);BlockProductsListing,BlockFilterBar,BlockSortModes,BlockPagination(split out of the previous combinedSectionProductListing);BlockMobileMenuBasicandBlockMobileMenuShop(non-standalone, hosted in header sections'mobileslots);BlockMenuSideBySideandBlockMenuHeaderBasic(non-standalone, headerdesktopslots);BlockMegaMenu(thin wrapper around the newMegaMenucompound);BlockProductDetailVariantSelectorOptions.
Changed
- Breaking — section renames (Studio data migration required):
SectionBasicHeader→SectionHeaderBasic;SectionBasicHeroSlider→SectionHeroSlider;SectionImageAndContent→SectionMediaText;SectionTestimonialPersonaQuote→SectionPersonaQuoteSlider;SectionTestimonialQuoteCardSlider→SectionQuoteCardSlider;SectionBrandLink→SectionBrandList;SectionSearchResultHeader→SectionSearchResultHero;SectionPricingPlans→SectionPlanCardSlider;SectionPricingTable→SectionPlanComparisonTable;SectionPageHeader/SectionCategoryHeader→SectionPageHero;SectionShopHeader→SectionHeaderShop;SectionError404→SectionPageNotFound;SectionProductDetailContainer→SectionProductDetail;SectionLogoPresentation→ split intoSectionLogoSlider/SectionLogoGridby the oldviewdiscriminator;BlockCtaBanner{Basic,Integrated,Showcase}→ promoted toSectionBanner{Basic,Integrated,Showcase};SectionBannerContainer→ consolidated intoSectionContainer. - Breaking — block renames (Studio data migration required):
BlockBasicHeroSliderSlide→BlockHeroSliderSlide;BlockTestimonial→BlockPersonaQuote;BlockProductGrid→BlockProductsListing;BlockQueryPagination→BlockPagination;BlockQuerySorting→BlockSortModes;BlockCmsButton→BlockButton(Studio labelCMS Button→Button);BlockCmsCardContent→BlockCard;BlockSingleLogoPresentation→BlockLogoSliderSlide. - Breaking — schema field renames (Studio data migration required) normalized across 30+ sections/blocks to the section-config standard, including:
blockMargin→margin;blockPadding/innerBlockPadding→padding;textAlignment/contentPosition/contentAlignment→alignment;headline*→heading*;actionButton[0]→ctaobject +ctaVisible;accordionStyle(BlockAccordion) →variant;image(SectionNewsletterRegistration) →media;BlockIframe.url→src;SectionScrollAnchor.id→anchorName;SectionPageHero.title→heading; plus many per-section renames onSectionTopBar,SectionFooter,SectionProductSlider,SectionProductSliderShowcase,SectionCategoryCardSlider,SectionQuoteCardSlider, and others.is*-prefixed schema fields (isSticky,isSaleDesign) are kept unchanged so stored configurations continue to bind without migration. - Breaking —
ctaButton.variantvalue remap (Studio data migration required): the CTA variant enum was reshaped from 12 to 14 values. Notable remaps:white-ghost→ghost-white;white-secondary→secondary-white;black-ghost→ghost-black;white-close→close-white;black-close→close-black;glass→glass-black(verify with design);input-field→ dropped (map tosubtleor drop);black-close-always-black/white-close-always-whitelose their always-color semantics. New variants without a predecessor:tertiary,positive,danger,subtle,info. - Breaking — auto-import tag prefix unified to
<L*>.@laioutr-core/uipreviously registered components with theLuiprefix; it now usesL, matching@laioutr-core/ui-kit. Templates referencing<Lui*>for anyuicomponent must be renamed to<L*>. - New shared-field presets in
shared-fields/:background.ts,margin.ts,padding.ts,size.ts,visibility.ts,buttonVariant.ts,themedStyleColor.ts,button.ts,containerStyle.ts,headingElement.ts,surfaceTone.ts. Top-level panels normalized toContent+Design(withStyling/Layoutdividers) across 30+ sections/blocks. SectionBlogPostDetail,SectionProductDetail,SectionScrollAnchor,SectionBlogPostListing,SectionMediaText,BlockMedia, andBlockIframeare now thin configuration adapters over theiruicomponents, with no schema changes.
Removed
- Breaking (Studio data migration required):
SectionBlogSliderandSectionFlexibleContentSlider→SectionContentSlider;SectionTestimonialQuoteCard→SectionQuoteCardSlider(single slide);SectionCardGrid→SectionContentGrid;SectionInpageNavigationBasic/Big/Compact→SectionCategoryCardGrid/SectionCategoryCardSlider;SectionAmbiendoHeader→SectionHeaderShopwithBlockMenuSideBySide;SectionShopHeaderNavigation→ demoted intoBlockMenuSideBySide;BlockProductReviews→SectionProductReviews;SectionFilterBar→ block-onlyBlockFilterBar.
1.34.0
Changed
- Reworked z-index architecture across the UI stack. Header sections opt out of section isolation so their sticky/fixed chrome remains visible above subsequent sections; the filter bar teleports its scroll-triggered fixed bar to
<body>to escape section isolation.
1.33.0
Added
scrollToTopprop on Pagination (defaulttrue), which scrolls the viewport to the top when navigating pages.
Fixed
- Button now emits
clickevents on the NuxtLink branch and forwards$attrson both root elements, so reka-uias-childworks correctly. SectionBlogPostListinguses reactive computed properties for client-side pagination.
1.32.5
Fixed
Cardrich-content prop (:content→:html); simplified SocialShare layout; wrapped BlogPostDetail content in a container div.
1.32.4
Added
- Standalone
BlockSocialShareblock for sharing the current page via social platforms.
1.32.2
Fixed
- CSS-layer order in Studio preview.
1.32.1
Fixed
- Workaround for entities not refetching on locale change.
1.32.0
Added
BlockProductReviewsblock,PageHeadersection, andSearchResultsHeadersection.
Fixed
- Correct hover font colors for some elements; loading state from async watchers.
1.31.4
Fixed
- Missing
useResolvedLinkimport inSectionBreadcrumbsthat caused a runtime error.
1.31.0
Added
LanguageSwitchernow uses market-domain data for available locales; locale props are threaded through Header, TopBar, MobileMenu, and MegaMenu components, and sections useuseAvailableLocalesfor navigation-based locale switching.
Changed
- URL fields migrated from
texttolinktype and resolved throughlinkResolverfor market-aware URL resolution.
Deprecated
useLinkResolveris converted to a singletonlinkResolverobject that no longer requires a setup context.useLinkResolveris preserved as a deprecated re-export. UnuseduseSwitchLanguagePathanduseSwitchMarketUrlwrappers were removed.
1.30.0
Changed
- All component CSS is now wrapped in
@layer lui-componentsfor cascade-layer control.
1.29.3
Fixed
- ThemeSwitcher import and
ThemeWithMeta; Input prop fallthrough and ShopHeader close button.
1.29.2
Fixed
- Correctly merge theme images.
1.29.1
Fixed
- Do not show the theme switcher when it is not enabled.
1.29.0
Added
- Theme switcher support.
1.28.0
Fixed
- Links in the basic header.
1.27.0
Added
- New Iframe block.
Fixed
- HeroSlider media loading eagerness.
1.26.1
Changed
SectionBreadcrumbsuses theBreadcrumbItemcanonical type.
1.26.0
Added
- Breadcrumb section.
1.25.0
Added
- Error 404, Pricing Plans, and Pricing Table sections.
1.24.3
Fixed
- Hydration error breaking the page when a Header component with submenus is used.
1.24.2
Fixed
FlexibleContentSliderSectionbreaking whenactionButtonis missing.
1.24.1
Added
WellKnownSectionTagand section tags.
1.24.0
Added
- Support for multiple CTAs in the basic header.
- Support for calling PDPs with variant option values.
1.23.0
Added
- Missing testimonial sections.
1.22.0
Added
- ProductShowcaseSlider section.
Fixed
- Footer width and background.
1.21.3
Added
- Support for a variant query parameter in
ProductDetailContainer.
1.21.1
Fixed
- Links with references are now case-insensitive to their
type.
1.21.0
Added
- Autosuggest in the shop header on mobile.
1.20.0
Added
- SearchOverlay wired to actual data.
1.19.0
Added
ConnectedCartcomponent for use in headers.
1.18.0
Added
- Correct
SectionBasicHeaderimplementation.
1.17.7
Fixed
SectionIntegratedHeaderrecursion bug.
1.17.0
Added
- Ability to select a root menu item in the Integrated Shop Header; the root menu places all of its children as navigation items.
1.16.0
Added
- Basic strawberry-field theme.
1.15.0
Added
- Integrated Shop Header section.
1.14.0
Added
SectionShopHeaderopens an empty cart; sold-out status shown in DetailAddToCart with LightboxModal connected to the product image gallery; detail variant switcher and add-to-cart toast.
1.13.0
Added
- Filter bar implementation and type adjustments.
Fixed
- Removed duplicate product info from
BlockProductDetailDetails.
1.12.0
Added
- Remote
QueryTemplates.
1.11.0
Changed
- Studio refresh compatibility.
1.10.0
Changed
- Improved LCP loading strategy.
1.9.0
Fixed
- Missing links; added
robots.txtand page SEO meta.
1.6.0
Fixed
- CSS layer order and swiper styles.
1.5.0
Added
- Adjusted definition default behaviour; added several sections and blocks.
earlier versions
Initial development of the Section and Block layer (1.1.0 – 1.4.0): the first section definitions, preparation for the Shopify demo, theme loading via ui-kit, and early ShopHeader login wiring. Intervening patch releases not listed here were internal fixes or cross-package dependency bumps with no Studio-facing change.