FREE Workshop on June 5th »
Book your seat

Changelog

March 20th, 2024 4.3.1

Improvements

  • Link in RichText created as a RichText plugin
  • The link in rich text now supports also the target (if target is "_blank", the rel is automatically set to noopener for security reasons)

March 18th, 2024 4.3.0

New feature: Ability to create Custom RichText Plugins

New feature: new Autocomplete control type

  • New type autocomplete for sidebar controls, to easily fetch external data asynchronously based on search text, with debouncing
  • See SideEditProps Docs

New feature: Quality setting on Images

  • Ability to set quality on the Image component, image sideEditProps or image customFields to set the image compression
  • See Image properties

January 30th, 2024 4.2.0

Support for React Server Components 🎉🥳🍾

  • Complete support for React Server Components with minimal change to bricks' structure
  • RSC-compatible bricks are cross-platform: they work also on Next.js with Pages router, Remix or Gatsby
  • New starter projects for Next.js 14 with App Router and RSC
  • See Server Components Docs to see how to create RSC-compatible bricks

New feature: fetch external data at Brick level

  • Ability to fetch at brick level: see External content Docs
  • This feature works cross-platform, not just for RSC

December 16th, 2023 4.1.3

Minor fixes


December 11th, 2023 4.1.0 4.1.1 4.1.2

New feature: Approval Workflow

  • Decouple saving a page from publishing it, through a Working Copy mechanism
  • Activate the Approval Workflow, so that only users with the proper permission can approve changes
  • See Approval Workflow Docs to see how it works

New feature: Change history for a page

  • The change history for a page is accessible from the "Page" tab of the right sidebar.

New permissions for users

From the dashboard, it is now possible to choose which users can:

  • Edit SEO attributes (meta, slug, Open Graph, Twitter, Schema.org)
  • Edit page attributes, like visibility, pageType, author, etc.

Improvements

  • Better SEO management: changes are applied immediately without the need to save in each tab, moved the Slug to the SEO view
  • Header: icon with tooltip for quick view of Last modified (date and author), visibility status, lock status and editing status (approved, working copy, pending approval)
  • Left Sidebar: The environment name is shown, when different from "main"

Fixes

  • The slugPrefix of a page type is correctly applied upon page creation

November 13th, 2023 4.0.7

Fixes

  • Fix missing dependency.

November 12th, 2023 4.0.6

Fixes

  • Fix click outside in Media Library popovers.
  • Unsplash: better mapping of alt and title fields.
  • Normalization of file name in Media Library and SEO name in the image edit modal.

November 3rd, 2023 4.0.4 4.0.5

Improvements

  • New function getSchemaOrgData to support JSON-LD injection in Remix starters.

October 25th, 2023 4.0.2 4.0.3

Fixes

  • Fixes related to external data and embeds.

October 24th, 2023 4.0.1

New feature

  • Added the meta data, OpenGraph and Twitter Card SEO fields for all the plans.

October 24th, 2023 4.0.0

New features

  • Media Library: a complete DAM (Digital Assets Management) system
  • Multiple Environments (content branches): create environments from the Dashboard, choose the environment with the environment configuration property
  • Advanced SEO: new interface to manage Meta tags, OpenGraph, Twitter Cards and the complete implementation of Schema.org entities; renderMeta() and renderJsonLd() to render them.
  • Slug Prefix: ability to set a slug prefix on pageTypes (slugPrefix)
  • Read-only Image: you can now use the Image component of React Bricks also for read-only images using the readonly attribute (for example coming from custom fields of related entities)
  • Show/hide sidebar controls of a brick by user (for example by custom role) or page (for example by page type). Now the show function of sideEditProps gets also the page and the logged user as arguments, so that you have total flexibility.

Improvements

  • Relationship field: now it saves only an ID of the related entity, but you can choose to also embed the whole content of the related entity (updated at build/run time)
  • Improved Image component: now you can upload a file, get it from URL, from Unsplash or from the Media Library
  • Improved File component: now you can also get a file from the Media Library, and there is a nice upload progreess bar
  • Allowed extensions: now the allowed extensions are always a subset of a set of generally allowed MIME types > extensions
  • Accents in slugs: by setting the allowAccentsInSlugs you can allow accented letters in the page slugs

August 4th, 2023 3.12.2 3.12.3

New feature

  • Link to live website in the Admin header (hostname is set in the dashboard)

July 31st, 2023 3.12.1

Fixes

  • File component: on the frontend render function the url argument receives the SEO-friendly URL.

July 28th, 2023 3.12.0

New features

  • The RichText component has a customFieldPlainText prop (true by default). If set to false, values are not transformed to plain text when saving to a custom field.

Improvements

  • Tags autocomplete on page now filters by page language (e.g. only tags from Italian pages for an Italian page)

July 26th, 2023 3.11.4

Fixes

  • Fix File SEO name management, ready for the upcoming Digital Assets Management (DAM) feature and for enterprise custom CDN.

July 18th, 2023 3.11.3

Fixes

  • Fix confirm delete file style with long file name

July 17th, 2023 3.11.0 3.11.1 3.11.2

New features

  • The Image component can be set as readonly with a source: in this way you can use the Image component also for images that should not be visually editable (for example the images of a posts list component that gets images from the posts' pages).

Improvements

  • Improved File component with new interface and upload progress bar
  • Upload progress bar on image component
  • Tags can be fetched by language; in the tags interface of the Page tab, only tags in the current language are shown
  • Left sidebar: show pages with unknown pageType (otherwise they cannot be accessed / removed)

Fixes

  • Fix for the Image component modal when there was no source

June 30th, 2023 3.10.0

New features

  • On the Image modal it is now possible to mark an image as "high priority (above the fold)" so that it gets optimized for high priority: if the browser has native lazy loading, we set the loading to "eager", otherwise we skip our lazy loading method. In both cases, we set the correct fetchPriority to high.

Improvements

  • All dependencies updated/replaced so that we have no more peers of React <18 declared by dependencies.
  • On Text and RichText the renderBlock and placeholder props are not required any more (by default a simple paragraph is rendered and the placeholder is "Type a text...").
  • The TextValue type is exported to allow correct typing of (rich)text props

Fixes

  • More robust fetching of the latest version from the npm registry
  • Prevent a very long page name from hiding the save button

April 27th, 2023 3.9.1 3.9.2

Improvements

  • getExternalDataArgs in the fetchPage function, to pass arguments to the getExternalData function (useful if you have data that depend on path params and not on the page - like variants of a product in an e-commerce)

Fixes

  • Fixed problems with Collaboration introduced in 3.9.0
  • Fixed image modal save of alt and seoName introduced in 3.9.0
  • Better Link typing
  • The link of the news popup in the Admin has target _blank

April 21st, 2023 3.9.0

New feature (for Enterprise plans): Flexible Permissions

For enterprise plans, ability to set fine-grained permissions on a user/page/language/brick level providing the canAddPage, canAddTranslation, canSeePageType, canSeePage, canEditPage, canDeletePage, canDeleteTranslation, canUseBrick in the permission object of the React Bricks configuration.

See the Permissions documentation.

Ability to create custom roles from the Dashboard and to assign them to users for use in the permissions functions.

New feature: Stories as bricks in "Add new"

It is now possible to have a story created in the bricks code appear as a brick in the "Add new" menu, using the showAsBrick flag.

See the Stories documentation.

New feature: Structured bricks in config

Bricks can be specified as a structured array (themes > categories > bricks), so that the order of categories can be preserved and it is not necessary to specify the theme and category for every brick. The config structure overrides the theme and category of the single bricks.

See Configuration, Theme, Category

New feature: getDefaultProps for Repeated items

It is now possible to specify the getDefaultProps function for each repeaterItem to override the defaults of the item for a repeater.

See Repeated Items documentation

New feature: Image custom placeholder

Ability to set a custom placeholder for each <Image> component.

See the Image documentation.

Improvements

  • The select control getOption function now receives all the props as an argument.
  • In the Playground, the selected brick is persisted across page refresh
  • On the Link ability to specify the simpleAnchor attribute to avoid the local link renderer (SPA router) even for local paths.
  • Better typing for the Link component
  • Typings for the returned value of getDefaultProps
  • Improved performance on large pages (core rewrite! ⚙️)
  • Slashes are allowed in the page slug to enable better organization of paths in the website.
  • Icons are outside the bricks by default
  • In the Playground, the bricks with hideFromAddMenu = true are hidden

Fixes

  • Removed brick min-height if icons are outside
  • Fixed repeated items props in Playground
  • Removed white border around bricks in preview
  • Props for Stories in code are now as expected, like the getDefaultProps ones
  • Sidebar radio controls: fixed problem with multiple radio buttons groups sharing the same values
  • Sidebar: fixed problem with collapsing of groups of props, when changing focused brick
  • Fix text refresh for repeated items

February 10th, 2023 3.8.10

New feature: News in Admin for important communications

When we have important announcements to share, it will be possible to see them in Admin.

Improvements

Better featureFlags management.


January 16th, 2023 3.8.9

New feature: "can edit content" on locked block

Now it's possible to prevent content edit (inline and via sidebar controls) for locked blocks (enterprise feature). Of course it's possible to prevent it also on default content blocks using the canEditContent flag on the the block default content.

Fixes

  • Removed two invalid DOM attributes from the Image component in Admin Preview.

January 6th, 2023 3.8.8

Fixes

  • Fixed bug in imageClassName introduced in v3.8.7.

January 3rd, 2023 3.8.7

Improvements

  • New placeholder image, proportional to the Image aspectRatio (if set), respecting the maxSize (if set).

December 30th, 2022 3.8.5 3.8.6

Fixes

  • Fix Playground displayed props for multi-item Repeaters
  • Fix default props for multi-item Repeaters
  • Fix key warning for Repeaters
  • Fix hydration error

December 16th, 2022 3.8.4

Improvements

  • Improved performance of the "Add new" sidebar

Fixes

  • Restored pink border on parent block when a child block is focused
  • Fix duplicate block
  • Fix hydration warning in PageViewer

December 6th, 2022 3.8.3

New feature: Theme

Ability to have a theme on the bricks, with theme selection in the "Add new" interface

Improvements

  • Improved the "Add new" UI with 2 columns
  • Deprecated the enablePreviewIcon configuration key (if there is an icon, it is shown)
  • Updated packages

Fixes

  • Fixed richtext focus problem in dev

December 2nd, 2022 3.8.2

Improvements

  • Improved performance of Text and RichText components

Fixes

  • Fixed sidebar controls props not changing properly
  • Fixed quick flash of "Made in React Bricks" banner on paid plans

November 14th, 2022 3.8.1

Fixes

Fixed blocking bug (missing dependency in production bundle)


November 10th, 2022 3.8.0

New Feature (for Enterprise plans): Lock at block level

You can now lock single blocks in a page, instead of an entire page.
See Locked structure

New Feature: More flexible default for pageTypes

For a pageType, you can now specify the default content in multiple ways.
The array of blocks can contain, for each block:

  • A string (the name of the brick, default content for the brick will be used)
  • A brick name with a story name (the content from the story will be used) and lock status for the block (locked, canAddBefore, canAddAfter)
  • A IContentBlock (block content with every prop and lock status)

See Page Types

New feature: Stories in bricks' schema

You can now add stories for a brick in code, adding a stories array to the brick's schema. This is useful when you want to document stories that are part of your design system style guide. The editors will see both the schema stories and the ones created by them. While user-created stories can be deleted, stories that are part of the brick's schema in code cannot be deleted, as they are part of the design system definition.

See Brick's schema

Improvements

  • Now you have the React Bricks version available on the ReactBricksContext, that you can reach via the useReactBricksContext hook. See useReactBricksContext.
  • In the footer you have the current React Bricks version and, if it's not the latest one, you have a small warning sign with the latest version in a tooltip.

October 7th, 2022 3.7.0

New feature: Entity Embed

You can now embed pages/entities inside of another page, so that it is a single source of truth: anytime the embedded page is changed, the change is reflected in all the pages embedding it. See Page / Entity embed

Improvements

  • On a sidebar prop you can now set a helpText that is rendered below the control.
  • You can now avoid the "click to edit" feature by setting the clickToEditSide to "NONE", or having a PageViewer with showClickToEdit set to false.

October 5th, 2022 3.6.1

Fixes

  • Fix bug for Repeater: if the repeated bricks used hooks, you had an error for broken rules of hooks.
  • Fix collaboration bug with Remix

September 30th, 2022 3.6.0

New feature: Unsplash

You can now search for images on Unsplash. See Unsplash integration. You can configure your own Unsplash API Key using the unsplashApiKey configuration parameter, otherwise you will have just 20 searches per hour per app.
Of course, you can disable the feature via the enableUnsplash configuration flag.


September 22th, 2022 3.5.1

Improvements

  • You can now set the shouldRefreshStyles flag on a sideEditProp, when the value change for this prop could cause an injection of new CSS styles by a CSS-in-JS library. This ensures the new styles are correctly loaded.

September 19th, 2022 3.5.0

New feature: Nested Repeaters

You can have any level of nesting using the <Repeater> component. See Nested blocks

New feature: Repeater with Multiple items.

A <Repeater> can have multiple types of repeated blocks. See Repeater Items

New feature: Preview bricks with image/icon

You can set an image and an icon for each brick, so that users can select them visually from the "add new" menu. See Bricks schema

Improvements

  • Much better CSS-in-JS support, also for libraries using the CSSOM to inject styles (remember to set the cssInJs flag on the configuration)
  • No more needs for ...rest spread on the main element of a repeated item

Possibility for a breaking change

It is really suggested that you don't spread ...rest any more on repeated items and that you remove those spreads from your codebase: leaving them could cause browser warnings for unknown attributes on DOM elements (because now on the rest you have all the props of the block, not just the sidebar props, which probably you already extract before the rest). If you are destructuring props that have the same name as a prop that now comes from a visual editing component (for example an image), the prop on the ...rest could override the other props.


August 18th, 2022 3.4.3

Fixes

  • Image: fix fallback for webp images
  • Page featured image: added featuredImage for back-compatibility

August 8th, 2022 3.4.2

Improvements

  • Image: removed wrapping <div> in Admin
  • Content editor: minor UI Improvements
  • Update packages

Fixes

  • Sidebar: fix tab jump on page meta change
  • Collaboration: avoid self page lock with HMR
  • Text and RichText: fixed cursor jump when Text components are bound to a metaField or a customField

August 4th, 2022 3.4.1

Fixes

  • Fix dependencies in published package

August 4th, 2022 3.4.0

New feature: Collaboration! 🎉🎉🎉

Big milestone: now you have real-time presence of all the users connected to an App and page-level lock, with possibility to force the unlock of a page.


July 27th, 2022 3.3.2

New feature: Icons outside of blocks

If you set the new blockIconsPosition property on the React Bricks configuration to types.BlockIconsPosition.OutsideBlock, the small icons for "add new block", "delete block", "duplicate block", "move up", "move down" will be rendered outside of the block (useful for example when you have a short block)


July 20th, 2022 3.3.1

Fixes

  • RichText: the softLineBreak attribute was not available for the RichText even if implemented. Now it is in the TypeScript interface and it works as expected
  • imageOptions for a sideEditProp or a custom field: maxWidth is optional
  • relationshipOptions for a sideEditProp or a custom field: label is optional
  • filterBy in fetchPages or usePages: better typings

July 19th, 2022 3.3.0

New feature: new Image component

  • Generation of a WebP image, with fallback to JPEG (or PNG if transparent, or GIF if animated). You may disable the WebP generation via the useWebP flag (true by default).
  • Support for sizes for size art direction.
  • Support for native lazy loading (if we detect browser support, we use native lazy loading.instead of our own). You can disable this feature using the useNativeLazyLoading flag (true by default). You may also provide the loading prop to override the default lazy and set it to eager (not recommended, generally it would hurt performance).
  • containerClassName, containerStyle and noWrapper are deprecated. Now by default no wrapper is rendered (it is still rendered only if you are applying the old containerClassName and containerStyle).
  • You can provide the more flexible renderWrapper function instead of the props above. The renderWrapper function receives width and height as arguments, so that you can calulate the image aspect ratio.
  • Works correctly even with JavaScript disabled

See Image docs

New feature: Login UI and Menu customization

  • For the Login UI you can customize the right image (or remove it), add your logo with width and height, change the welcome text and its CSS style
  • For the Admin top menu, you can provide your own menu using the getAdminMenu function, which receives the isAdmin argument and should return an array of objects with label and path. If path is external, it will render an anchor tag, while if it is a local path, it will use the router navigation.

See Customizing UI docs

New feature: Pages as Entities

This features make easier to work with React Bricks as a sort of headless CMS, but where you can still edit the entity data in a visual way.

  • Visual editing of page Meta and Custom fields: the Text, RichText and Image components can now be bound to page meta fields (like title, description, language, image) or custom fields, using the metaFieldName or customFieldName (instead of the usual propName). The fields from the sidebar and the one edited visually have 2-way data bounding.
  • isEntity property on pageType: if you create page type with isEntity set to true, you will see a new tab menu on the left to choose between Pages and Entities. Entities are just pages for React Bricks, but they could not correspond to real pages in your frontend. In this way you don't confuse your editors. For example you could have in Entities things like Categories or Menu Items.
  • Custom fields of type relationship with relationshipOptions (to specify the referenced pageType, the label and a multiple flag to have a many-to-many relationship).
  • fetchPages has now a filter option to fetch pages based on custom fields' value.

Improvements

Organization of pages in categories

  • On each pageType you can define an array of categories
  • Editors can then use those categories to organize the pages of that pageType (select category from the Page tab)

June 30th, 2022 3.2.29

Bug fixes

  • File modal: target blank to download file.
  • Fixed plan limits for AppSumo users.

June 29th, 2022 3.2.28

Bug fixes

  • Fixed default page size limit in fetchPages.

June 28th, 2022 3.2.27

Bug fixes

  • Fixed bug in the bricks label with no repeaterItems.

June 10th, 2022 3.2.26

Improvements

  • Show label of selected brick in the right sidebar.

May 17th, 2022 3.2.25

Bug fixes

  • Fixed interface IImageSource: width and height are no more mandatory

April 21st, 2022 3.2.24

Improvements

  • Playground: better formatted code and style fixes

April 20th, 2022 3.2.21 3.2.23

New features

Bug fixes

  • Fix hydratation in PageViewer for React 18 compatiblity.
  • Fix bug in RichText renderItalic.
  • Minor bug fixes.

April 5th, 2022 3.2.19 3.2.20

New features

  • Add Scheduled publishing warnings.
  • Add Editorial calendar in admin.

Bug fixes

  • Fix bug: scheduled publishing wasn't updated on page change.
  • Minor bug fixes.

March 14th, 2022 3.2.17 3.2.18

New features

Improvements


March 8th, 2022 3.2.14

New features

  • Add "Keep me logged in" to login interface.

Bug fixes

  • Minor bug fixes.

February 28th, 2022 3.2.12 3.2.13

New features

  • Add Preview link in admin.

Bug fixes

  • Minor bug fixes.

February 18th, 2022 3.2.11

New features

  • Add the noWrapper prop to the Image component to avoid the wrapping div.

Improvements

  • Graphics update: RichText toolbar always inside the brick space.
  • Add aspectRatio to the Image control in Side Edit Props.

Bug fixes

  • In case of Boolean Side Edit Props set the default value to false instead of null.

February 7th, 2022 3.2.10

Improvements

  • getDefaultProps no more mandatory in the schema.
  • Graphics update: RichText toolbar always inside the rich text space.

Bug fixes

  • Minor bug fixes.

January 22nd, 2022 3.2.8 3.2.9

Improvements

  • Number of pages per type beside the type name in the sidebar.
  • When add new block, autofocus on search input.

Bug fixes

  • Minor bug fixes.

December 31st, 2021 3.2.6 3.2.7

Bug fixes

  • Add useVisualEdit to frontend bundle.
  • Add blockPluginConstructor, markPluginConstructor and plugins to frontend bundle.
  • Minor bug fixes

December 20th, 2021 3.2.5

New features


December 13rd, 2021 3.2.4

New features

  • Add index prop to items in Repeater (in order to conditionally render based on index)
  • Add newItemMenuOpen in brick's schema.

Bug fixes

  • Minor bug fixes.

December 10th, 2021 3.2.1 3.2.2 3.2.3

New features

Improvements

  • Add popup in admin in case email not verified.

Bug fixes

  • Minor bug fixes.

December 7 th, 2021 3.2.0

New features

  • New App settings page with direct links to the dashboard.

Improvements

  • New page hint if there are less than 3 pages.

December 3rd, 2021 3.1.2 - v3.1.9

New features

  • Default export 'react-bricks/frontend'.

Bug fixes

  • Minor bug fixes.

December 2nd, 2021 3.1.1

New features

  • New File component that allows editors to upload files that may be downloaded by users on the frontend.

Improvements

  • Smaller JS footprint on frontend: now the library exports two bundles: "frontend" and "admin".

November 1st, 2021 3.0.1

New features

  • multiline on Text (default false).
  • multiline on RichText (default true).

November 1st, 2021 3.0.0

New Features

  • Compatibility with Gatsby: now React Bricks is fully compatible with Gatsby (you can find 2 starters for Gatsby)
  • Stories: you can now save brick configurations (sets of props), so that you (or your editors) can reuse them
  • Images crop and fixed aspect ratio: upon upload it is possible to crop an image. You can set a fixed aspect ratio on the Image component, so that the crop will be limited to that aspect ratio.
  • Bricks organization: you can now assign a category to each brick and an array of tags. Bricks are organized by category and searchable by name or tag. You can also add a link to external documentation for each Brick, which is shown in the Playground.
  • Backup and restore: You can now backup the App content and restore it from the React Bricks Dashboard.
  • History: go back in time for each Page and restore the status before any action.
  • Scheduled publishing (Pro only): with a Pro plan, you can schedule the publishing of a page at a date in the future. React Bricks will change the page status from Draft to Published on that date. Based on the "Trigger rebuild upon scheduled publishing" checkbox in the build hooks settings, React Bricks will trigger a rebuild when the page is published, so that the content will be visible at the scheduled date and time with no action needed on your side.
  • Staging Build Hook (Pro only): now you can set a build hook for the Staging environment and give permissions accordingly to your editor users, so that a user may be able to trigger a build in staging but not in production.
  • Events webhook (Enterprise only): if you are on an Enterprise Plan, you can set a webhook that receives all the Pages and Translations events (creation, update, delete).
  • mapExternalDataToProps on schema, used by Block and BlockViewer
  • getExternalData on pageType, used by usePage, usePagePublic and simpleFetchPage
  • Add multiline prop on RichText and Text, fixed bug of n save mutation with "mod +s" hotkey

Improvements

  • The RichText component now by default supports also Heading H1..H6 and Quote.
  • There is a new RichTextExt component, which is an extensible RichText with a plugins system. Underneath the RichText component (kept for compatibility) uses the new RichTextExt.
  • shouldRefreshText isn't needed any more on sideEditProps which affect the style of (Rich)Texts.
  • New JSON format that, on average, reduces the transferred payload by 50%.
  • Removed the wrapper <div></div> around the renderBlock.

Bug fixes

  • Bug fix: if you set a min in repeaterItems now when you add a new block it will display a "min" amount of that item

Breaking changes

  • On the Page returned by fetchPage or usePage, the translations array isn't an array of language strings anymore, but an array of objects with language and slug.

Migration

If you need to migrate from v2 to v3, please read Upgrade v2 > v3.