Reliable Sync Protocol PR: Live Demo & Discussion for Collaborative Editing

On January 6th at 7PM UTC, a group gathered for a demo and discussion with Kevin Jahns, the author of Yjs, a popular framework for building collaborative applications. In this session, we went in depth on an in progress pull request that implements a reliable sync protocol for collaborative editing. We also all collaborated on a post live as a fun way to test limits! Thank you to all who joined and for Kevin for hosting. To follow future efforts in this space, please follow this dedicated GitHub issue and/or join the #feature-realtime-collaboration slackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/ channel.

Recording

Notes

Notes are mainly powered by an AI note taker so please leave a comment if anything feels wildly off.

Overview

Kevin Jahns presented a demonstration on utilizing Yjs to enhance real-time editing capabilitiescapability A capability is permission to perform one or more types of task. Checking if a user has a capability is performed by the current_user_can function. Each user of a WordPress site might have some permissions but not others, depending on their role. For example, users who have the Author role usually have permission to edit their own posts (the “edit_posts” capability), but not permission to edit other users’ posts (the “edit_others_posts” capability). in WordPress, addressing existing challenges such as content synchronization and potential conflicts during simultaneous edits. He introduced features like automatic conflictconflict A conflict occurs when a patch changes code that was modified after the patch was created. These patches are considered stale, and will require a refresh of the changes before it can be applied, or the conflicts will need to be resolved. resolution and a heartbeat APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. for near real-time updates, emphasizing that while the current implementation may not fully replicate the Google Docs experience, it significantly improves user trust and collaboration. Participants were encouraged to explore Yjs further and consider its applications in their projects.

Jahns discussed the technical obstacles in implementing collaborative editing, particularly the lack of WebSocket support across various PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher engines and the limitations of WebRTC, which requires multiple servers for reliable operation. He proposed using HTTPHTTP HTTP is an acronym for Hyper Text Transfer Protocol. HTTP is the underlying protocol used by the World Wide Web and this protocol defines how messages are formatted and transmitted, and what actions Web servers and browsers should take in response to various commands. requests for syncing while allowing WebRTC as an optional enhancementenhancement Enhancements are simple improvements to WordPress, such as the addition of a hook, a new feature, or an improvement to an existing feature.. Additionally, he highlighted issues with blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. validation errors and synchronization challenges with custom block types in the GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/ editor, suggesting the creation of a special editor binding for Yjs to improve synchronization. Security concerns regarding the WebRTC setup were also raised, with a focus on the need for role-based collaboration restrictions to prevent document manipulation.

The session also covered the storage and management of Yjs documents, with Jahns explaining that Yjs content is stored as comments in post content, facilitating straightforward revision creation. He acknowledged the challenges of managing real-time changes and the impact of Yjs documents on content size. Discussions included the limitations of WebRTC, particularly its reliance on costly TURN servers, and the need for ongoing testing to ensure the reliability of collaborative editing features. Jahns emphasized the importance of prioritizing collaborative editing to enhance the editor’s evolution and received appreciation for his transparency and commitment to the Gutenberg project.

Real-Time Editing Demo with Yjs
Kevin Jahns presented a demo on real-time editing with Yjs, emphasizing its role in enhancing collaborative features in WordPress. He explained the limitations of the current WordPress editor regarding content synchronization and introduced new features like automatic conflict resolution and the heartbeat API for better real-time collaboration.

Collaborative Editing in WordPress
Kevin Jahns addressed the difficulties of enabling collaborative editing in WordPress, noting that WebSockets are not universally supported across PHP engines. He explained that while WebRTC could be used as a fallback, it is not reliable enough for all users. Instead, he proposed using HTTP requests for syncing, with WebRTC as a progressive enhancement for those who can utilize it.

Block Synchronization and Customization Challenges
Kevin Jahns addressed synchronization issues with block types (and ran into an error with block validation in the process!). He explained that while standard elements like text and images function properly, custom block types may encounter difficulties due to Gutenberg’s design, which does not fully accommodate changes from multiple peers. Jahns emphasized the need for a special editor binding for Yjs to enhance synchronization.

Discussion on Signaling Server and Security Concerns
Kevin Jahns confirmed that Jorge’s signaling server implementation in WordPress remains unchanged. He raised security concerns regarding the WebRTC setup, highlighting that it permits document manipulation by anyone with read access. Jorge noted that to make the system production-ready, several security measures need to be implemented, particularly around user roles and collaboration.

Yjs Document Storage and Revision Management
Kevin Jahns responded to Frank’s inquiry about the Yjs implementation and its impact on content revisionsRevisions The WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision.. He detailed that Yjs documents are stored as comments within the post content, which facilitates the creation of revisions upon saving. Additionally, he mentioned that future comparisons of revisions could be made using Yjs documents, similar to a git diff, and that attribution for content creation is also supported.

Discussion on Yjs Document Implementation and Security Concerns
Kevin Jahns highlighted the downside of Yjs documents inflating content size but reassured that normal users wouldn’t see the comments. Aaron Jorbin pointed out the security implications of allowing users to input unfiltered HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers.. Kevin also mentioned the potential for filtering user visibility of Yjs comments and the need to track edits made by users, which currently lacks a backend solution.

WebRTC vs. WebSocket for Collaborative Editing in WordPress
Kevin Jahns explained that WebRTC is not a reliable option for collaborative editing in WordPress due to its dependency on multiple servers and potential blocking by companies. He suggested using HTTP requests as a baseline for collaboration, which provides a satisfactory experience for most users. For those needing more reliability, he mentioned the possibility of implementing WebSocket servers, which could also enhance security and authentication.

Discussion on WebRTC and TURN Servers
Kevin Jahns highlighted the overhead of WebRTC and the expense of hosting TURN servers, indicating that they are not a viable option for everyone. Jorge shared his thoughts about the reliability of TURN servers from providers like Google and Twilio. They noted that while STUN servers are affordable and public, TURN servers are costly and can lead to misuse.

Collaborative Editing and Yjs Integration
Kevin Jahns highlighted the challenges faced with collaborative editing in the current editor setup, particularly issues with image handling and the undo-redo functionality. He stressed the necessity of prioritizing collaborative editing and proposed using Yjs as a solution to enhance these features. Kevin also mentioned that recent updates to Gutenberg have caused disruptions, indicating a need for better testing and support.

Yjs Integration and Block Syncing Challenges
Kevin Jahns explained the process of syncing textual content through JSONJSON JSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML., noting that changes in one block can overwrite changes in another. He acknowledged existing issues with tables and galleries, indicating that these would be addressed in future pull requests. Kevin also highlighted the importance of creating a robust integration with Yjs for better collaboration.

#gutenberg, #hallway-hangout, #phase-3

What’s new in Gutenberg 19.9? (19 December)

“What’s new in GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/” posts (#gutenberg-new) appear on a biweekly basis after every Gutenberg release, and showcase the latest features and improvements. 

Interested in learning more? Here’s an overview of how you can keep up with news and events related to Gutenberg and the BlockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. Editor.


Gutenberg 19.9 is out of the oven and ready to download.

The last release of 2024 introduces the Style Book to classic themes, a new Query Total block, a swathe of component library enhancements, and code quality improvements.

Table of contents

  1. Style Book in classic themes
  2. Introducing the Query Total block
  3. More Highlights
  4. Changelog
  5. First-time contributors
  6. Contributors

Style Book in classic themes

The Style Book now appears in supported classic themes under Appearance > Design > Styles in the adminadmin (and super admin) menu. 

Support is available for classic themes that either support editor styles via add_theme_support( 'editor-styles' ) or have a theme.jsonJSON JSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML. file. 

The Style Book provides a comprehensive overview of your site’s colors, typography, and block styles in an organized layout. Each block example and style group is labeled, making it easy to preview and understand your theme’s current design settings. Think of it as if your theme threw a party, and all the design elements showed up wearing name tags. 😀

For classic themes that support the Style Book, site patterns have been relocated to Appearance > Design > Patterns, consolidating all design-related functionality from the Site Editor into one place. Previously, patterns were listed under Appearance > Patterns. 

Testing is an important step for this feature before it’s introduced to WordPress CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.. If you have the time, please help identify potential issues, and suggest areas for improvement by logging your feedback on GitHubGitHub GitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the ‘pull request’ where code changes done in branches by contributors can be reviewed and discussed before being merged by the repository owner. https://github.com/. Testing instructions can be found on the original PR. Thank you!

Introducing the Query Total block

You know how many results are in your queries, but do your site’s readers? The new Query Total block is here to help.

When added within a Query LoopLoop The Loop is PHP code used by WordPress to display posts. Using The Loop, WordPress processes each post to be displayed on the current page, and formats it according to how it matches specified criteria within The Loop tags. Any HTML or PHP code in the Loop will be processed on each post. https://codex.wordpress.org/The_Loop block, the Query Total block displays the number of results the query has returned, or, alternatively, the current range in a set of paginated results.

More Highlights

Gutenberg 19.9 introduces phpMyAdmin to wp-env as a launch option. phpMyAdmin will automatically connect to the running mysqlMySQL MySQL is a relational database management system. A database is a structured collection of data where content, configuration and other options are stored. https://www.mysql.com database service, allowing you to inspect and manage the local WordPress database as you develop. (#67588).

Featured imageFeatured image A featured image is the main image used on your blog archive page and is pulled when the post or page is shared on social media. The image can be used to display in widget areas on your site or in a summary list of posts. backgrounds in the Cover block now come with resolution controls so that you can change their sizes (#67273). 

Reset colors for blocks and global styles in the editor with a single click thanks to the inline reset button added to all color controls (#67116).

Looking to replace your Query block’s design? Query block patterns have been relocated from a modal to a dropdown. It’s still in the block toolbar, now under “Change design” (#66993).

You can now also set your site’s home page from within the Site Editor via the page actions menu (#65426). This is the equivalent of updating the Reading Settings in “Settings > Reading”. Under “Pages” in the editor, find the page you’d like to set as your homepage, click on the action menu, and select ‘Set as homepage’.

Changelog

Enhancements

  • Feature: Add navigation.isLoading state to core/router store. (67680)
  • Update the title, description, and order of Experiments page. (67762)
  • wp-env: Add phpMyAdmin support. (67588)

Components

  • Added enableAlpha prop to CustomGradientPicker and GradientPicker components. (66974)
  • BorderBoxControl: Reduce gap value when unlinked. (67049)
  • DateTime: Add default date/time to stories. (67678)
  • Deprecate COLORS.white. (67649)
  • Disabled: Suppress contentEditable warning in story. (67679)
  • Document layout in Storybook. (67628)
  • DropdownMenu: Increase option height to 40px. (67435)
  • DuotonePicker: Simplify Button styles. (66641)
  • Menu: Throw when subcomponents are not rendered inside top level Menu. (67411)
  • Popover: Use anchor instead of anchorRef in story. (67674)
  • Storybook: Remove unnecessary feature flags. (67576)
  • Storybook: Update ArgsTable to Controls in preview. (67582)
  • Storybook: Update control types from null to undefined. (67581)
  • Storybook: Use manager-api instead of addons package. (67578)
  • Update @ariakit/reactReact React is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces. https://reactjs.org to 0.4.13. (65907)
  • Update @ariakit/react to 0.4.15 and @ariakit/test to 0.4.7. (67404)

Block Library

  • Cover Block: Image size option for featured image. (67273)
  • Feature: Allow Post Template block to get deeply nested within Query Block. (67657)
  • Image Block: Change how the Image’s overlay styles are applied. (67788)
  • Navigation: Enable all non-interactive formats. (67585)
  • Query block: Move patterns modal to dropdown on block toolbar. (66993)
  • Separator block: Allow divs to be used as separators. (67530)
  • New Block: Add Query Total block for displaying total query results or ranges. (67629)
  • Block Library: Update the relationship of No results block to ancestor. (48348)

DataViews

  • Add headerHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes. to the quick edit when bulk editing. (67390)
  • Data views: Expand configuration drop down on mobile. (67715)
  • Quick Edit: Add Template field. (66591)
  • Refactor actions to render modal outside of the menu. (67664)
  • Renders DataForm component only when data has been fetched. (67694)
  • Unify layout configuration. (67477)
  • Update bulk header with actions. (67743)

Style Book

  • Add stylebook screen for classic themes. (66851)
  • Scroll to top at styles root. (67605)
  • Stylebook: Render overview colors in 4 columns. (67597)
  • Update style book headings to new design. (67546)

Post Editor

  • Inline Commenting: Added new sidebarSidebar A sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme. as extension of the canvas. (67347)
  • Inline Commenting: Re-order the comments in sidebar in which blocks are listed. (66927)
  • Inline commenting: UXUX User experience Enhancements for Comments. (67385)

Site Editor

  • Data Views: Add action for pages to set site homepage. (65426)
  • Sidebar: Update appearance of active items. (67318)
  • Style the selected template pattern. (65917)

Data Layer

  • Data: Expose ‘useSelect’ warning to third-party consumers. (67735)
  • Data: Include more details when shallow equality fails in ‘useSelect’. (67713)

Global Styles

  • Controls in grid should match between sidebar panel and editor. (67602)
  • Shadows: Improve design and a11yAccessibility Accessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility) of remove button. (67705)

Block Editor

  • Prefer exact matches in Link Search results sorting. (67367)
  • Try direct drag (outside text editable). (67305)

Zoom Out

  • Keep only copy, duplicate and delete in the zoom out more block toolbar menu item. (67279)

Font Library

  • FontCollection: Update pagination controls. (67143)

Colors

  • Add reset button to color control. (67116)

Bug Fixes

  • Exclude Set instance methods from polyfills. (67230)
  • Preload: Fix settings fields order. (67450)
  • Scripts: Make React Fast Refresh work with multiple blocks. (64924)
  • WP Scripts: Update webpack dependencies related to styling. (67572)

Site Editor

  • Allow access to quick edit. (67469)
  • Edit Site: Fix sidebar template author navigation. (67382)
  • Fix Site editor navigation menuNavigation Menu A theme feature introduced with Version 3.0. WordPress includes an easy to use mechanism for giving various control options to get users to click from one place to another on a site. items alignment visual regressionregression A software bug that breaks or degrades something that previously worked. Regressions are often treated as critical bugs or blockers. Recent regressions may be given higher priorities. A "3.6 regression" would be a bug in 3.6 that worked as intended in 3.5.. (67321)
  • Fix sidebar item animation regression. (67771)
  • Fix sidebar plugins. (67557)
  • Fix the templates route on mobile. (67547)
  • Fix: Fixed site-editor crashing when added front-page template and clicking more option. (67500)
  • Fix: Fixed styling tab not opening on themes without style variations on mobile & desktop. (67537)
  • Preload: Parse post ID from p (path). (67465)
  • Remove default page slug. (67673)
  • Router: Fix addition and removal of empty classnames. (67378)
  • Wrap each router area in ‘ErrorBoundary’. (64245)
  • useEditorTitle: Fix wrong request without ID. (67475)

Block Editor

  • Animate useScaleCanvas() only when toggling zoomed out mode. (67481)
  • Drag and drop: Fix drop zones on block drag. (67317)
  • Drag and drop: Fix firefox compat logic. (67439)
  • Fix JSJS JavaScript, a web scripting language typically executed in the browser. Often used for advanced user interfaces and behaviors. error in the ‘useTabNav’ hook. (67102)
  • FontFamilyControl: Restore margin bottom. (67424)
  • Inserter: Hide child blocks from the inserter when needed. (67734)
  • Inserter: Patterns: Remove loading indicator. (67072)
  • Inserter: Should receive focus on open. (67754)
  • Remove words count in the multi-selection inspector. (67624)
  • Storybook: Fix BlockPatternsList fixtures. (67672)
  • Drag and drop: Fix misplaced drop indicator. (67434)
  • Drag and drop: Fix scroll disorientation after drop. (67405)
  • Drag and drop: Restore moving animation. (67417)

Block Library

  • Align Submenu block and Nav Link block by including description and wrapping span. (67198)
  • CommentsPagination: Set font-size to inherit for pagination items. (67296)
  • Fix latest post block spacing issue. (66442)
  • Fix: Caption with Link in Wide-Width and Full-Width Images Appears on two lines. (67392)
  • Fix: Don’t show aria-label when its value is empty. (67381)
  • Navigation Block: Fix issue with double-clicking “Create a new menu” causing duplicate menus. (67488)
  • Pullquote block having design issue when text-decoration is choosen strikethrough. (66707)
  • Remove inline-block display from image anchor in style.scss. (67368)
  • Search block: Add space between attributes when using “Button only” option. (61399)
  • Updated ‘Set featured image’ text in dropdown. (67775)

DataViews

  • Avoid double click handler on primary fields. (67393)
  • Better handling of missing onClickItem prop. (67402)
  • Fix filters lost when switching layouts. (67740)
  • Fix hidden List layout actions dropdown. (67778)
  • Fix reordering fields in list and grid layouts. (67777)
  • Fix: Duplicate template part refers to original name instead of duplicated name. (67329)
  • Preserve filters when switching layouts in templates dataviews. (67744)
  • QuickEdit: Prevent site-editor from crashing when slug is not an object. (67577)
  • Site Editor: Fix featured image not appearing in pages dataviews. (67562)

Components

  • CustomSelectControl: Update Value from Fresh State. (67733)
  • Fix the ‘ClipboardButton’ effect cleanup. (67399)
  • Navigation: Fix active item hover color. (67732)
  • Scrollable: Fix story by declaring field as readonly. (67683)
  • Storybook: Fix control types. (67646)
  • Storybook: Fix storybook blocks imports. (67684)
  • Storybook: Fix table markup in Design Language – Radius documentation. (67686)
  • Theme: Fix contrast in nested story. (67681)

Post Editor

  • Fix MetaMeta Meta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. boxes saving when they’re not present. (67254)
  • Fix hiding and showing of meta boxes. (67504)
  • Fix: Header layout spacing in Firefox. (67074)
  • Make sure Document Bar doesn’t go missing. (67322)
  • Update pre-publish panel wording to accurately describe the review process. (67328)

Zoom Out

  • Fix for inserter. (67495)
  • Fix useZoomOut inserter behavior. (67591)
  • Fix zoom animation scrollbar. (67536)
  • UseScaleCanvas performance improvements. (67496)

Write mode

  • Fix color of disabled buttons in dark toolbar. (67348)
  • Fix synced pattern editing in write mode and refactor block editing mode to reducer. (67026)
  • Fix: Remove parent block selector while in Write mode. (67395)
  • Fix: Write Mode mode persists as enabled in widgetWidget A WordPress Widget is a small block that performs a specific function. You can add these widgets in sidebars also known as widget-ready areas on your web page. WordPress widgets were originally created to provide a simple and easy-to-use way of giving design and structure control of the WordPress theme to the user. editor. (67587)

Global Styles

  • Edit site: Remove empty preview border and redirect to editor in global styles navigation. (67548)
  • Fix: Styles section does not moves stylebook to typography. (67423)
  • Global Styles Preview: Don’t use iframeiframe iFrame is an acronym for an inline frame. An iFrame is used inside a webpage to load another HTML document and render it. This HTML document may also contain JavaScript and/or CSS which is loaded at the time when iframe tag is parsed by the user’s browser. component. (67682)

Style Book

  • Fix critical error when blocks are not registered. (67703)

Design Tools

  • Global Styles: Fix handling of booleans when stabilizing block supports. (67552)

Block bindings

  • Revert “Extensibility: Make Block Bindings work with editor.BlockEdit hook”. (67516)

Patterns

  • Site Editor: Fix the patterns route on mobile. (67467)

Focus Mode

  • Site Editor: Fix focus mode navigation. (67458)

List View

  • Fix List View not updating when switching editor modes. (67379)

Extensibility

  • Make Block Bindings work with editor.BlockEdit hook. (67370)

Synced Patterns

  • Remove use of contentOnly block editing mode for synced patterns. (67364)

Widgets Editor

  • Block Bindings: Remove client core sources registration in widgets. (67349)

REST APIREST API The REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think “phone app” or “website”) can communicate with the data store (think “database” or “file system”) https://developer.wordpress.org/rest-api/

  • Support search_columns argument in the user endpoint. (67330)

AccessibilityAccessibility Accessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility)

  • [Dataviews] Fix: Space does not triggers the media button on grid view. (67791)

Block Editor

  • BlockSwitcher: Refactor to use Button layout properly. (67502)
  • Remove one occurrence of incorrect usage of ItemGroup. (67427)

DataViews

  • [a11y] Fix: Media button on the page view grid does not have an accessible name. (67690)

Components

  • Fix incorrect usage of ItemGroup in the Image block filters panel. (67513)

Post Editor

  • Fix EntitiesSavedStates panel dialog props. (67351)

Performance

  • Fix re-renders caused by getEntityRecordsPermissions after #67667. (67770)
  • Preload: Fix end-to-end test. (67497)
  • Site Editor: Pages: Preload template lookup. (66654)
  • [mini] Preload: Add post type. (67518)

Experiments

  • Move duplicateTemplatePart action to the @wordpress/fields package. (65390)

Documentation

  • Button: Revise documentation. (66617)
  • Docs: Fix Playwright Page Object Model link. (67652)
  • Docs: Include the strategy for setting engines for WordPress packages. (67727)
  • Docs: Remove invalidinvalid A resolution on the bug tracker (and generally common in software development, sometimes also notabug) that indicates the ticket is not a bug, is a support request, or is generally invalid. key projects links on the documentation. (67491)
  • Improve documentation for fields package. (67580)
  • Refine getServerState() & getServerContext() documentation. (67499)
  • Storybook: Add WritingModeControl story. (67343)
  • Storybook: Add stories for AlignmentToolbar and AlignmentControl components. (67046)
  • Storybook: Add stories for HeadingLevelDropdown component. (67294)
  • Storybook: Revert “Preview: ArgsTable => Controls (#67582)”. (67656)
  • Storybook: Support keyword search in Icon Library. (67442)
  • Switch Several Links to httpsHTTPS HTTPS is an acronym for Hyper Text Transfer Protocol Secure. HTTPS is the secure version of HTTP, the protocol over which data is sent between your browser and the website that you are connected to. The 'S' at the end of HTTPS stands for 'Secure'. It means all communications between your browser and the website are encrypted. This is especially helpful for protecting sensitive data like banking information. in Document Files. (67706)
  • Update README.md. (67711)
  • Update extending-the-query-loop-block.md. (67529)
  • Update global stylesheet docblocks with custom-css parameter. (67716)
  • Updated old URLURL A specific web address of a website or web page on the Internet, such as a website’s URL www.wordpress.org in Documentation. (67446)

Code Quality

  • Convert lock unlock to generics. (66682)
  • CreateTemplatePartModal: Avoid identity warning in useSelect. (67786)
  • CreateTemplatePartModal: Replace ts-ignore with ts-expect-error. (67709)
  • Fix misc type compilation errors in editor and block editor packages. (67410)
  • Fix: Invalid JSDoc for optional string parameter and return value. (67489)
  • Fix: Remove unused test code on tools panel. (67589)
  • Removed trailing space in “Color randomizer “. (67457)
  • Update misc types and revert WPCompleter export from components. (67599)

Components

  • BoxControl: Deprecate 36px default size. (66704)
  • BoxControl: Passive deprecate onMouseOver/onMouseOut. (67332)
  • BoxControl: Refactor and unify the different sides implementation. (67626)
  • CustomSelectControl: Deprecate 36px default size. (67441)
  • FormFileUpload: Deprecate 36px default size. (67438)
  • FormTokenField: Deprecate 36px default size. (67454)
  • NumberControl: Deprecate 36px default size. (66730)
  • RangeControl: Update the default marks styles to match the padding/margin control. (67611)
  • Remove __unstableMotionContext from @wordpress/components. (67623)
  • SlotFill: Remove explicit rerender from portal version. (67471)
  • Tabs: Overhaul unit tests. (66140)
  • ToolbarButton: Set size to “compact”. (67440)
  • UnitControl : Deprecate 36px default size. (66791)

Block Editor

  • Group ‘onRemove’ callback with other public APIs. (67551)
  • InspectorControlsSlot: Remove unused framer motion context forwarding. (67522)
  • LetteringSpacingControl: Deprecate 36px default size. (67429)
  • Reduce the ‘isZoomOut’ selector calls in the block toolbar. (67594)
  • Remove ‘React.Children’ legacy APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. in ‘Warning’ component. (67675)
  • Replace remaining custom deep cloning with ‘structuredClone’. (67707)
  • Stabilize LinkControl Component. (56384)

Site Editor

  • Remove .components-item-group selector in edit-site components[2]. (67575)
  • Site Editor Sidebar: Remove hasGlobalStyleVariations condition for the Styles nav item. (67545)
  • Unify layout with posts dataviews. (67162)
  • Use path based routing instead of query args and site-editor.php routes. (67199)

Post Editor

  • Editor: Refactor ‘PostPublishPanelPostpublish’ to function component. (67398)
  • Editor: Use hooksHooks In WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same. instead of HOC in ‘PostPublishButtonOrToggle’. (67413)
  • Remove PostSlugCheck and PostSlug unused components. (67414)

DataViews

  • Create a single component for rendering the actions list. (67558)
  • Fix: Dataviews remove primary field concept from some classes. (67689)

Data Layer

  • TypeScript: Convert factory utils in data package to TS. (67667)

Shortcodes

  • Add types for shortcodeShortcode A shortcode is a placeholder used within a WordPress post, page, or widget to insert a form or function generated by a plugin in a specific location on your site. package. (67416)

Block bindings

  • Remove fallback for context.postType in post meta. (67345)

Block hooks

  • Navigation block: Remove more obsolete Block Hooks helpers. (67193)

Tools

  • PR template: Add before/after table. (62739)

Build Tooling

  • Build: Stop generating unused legacy scripts for core blocks. (65268)
  • CI: Skip native jobs. (67799)
  • DataViews build-wp: Don’t bundle singleton WordPress packages. (67590)
  • DataViews build-wp: Don’t bundle the date package. (67612)
  • Keycodes: Improve tree shaking by annotating exports as pure. (67615)
  • Upgrade TypeScript to 5.7 and fix types. (67461)
  • Combine the release steps to ensure that releases are tagged. (65591)

Testing

  • e2e-test-utils-playwright: Increase timeout of site-editor selector. (66672)

Security

npm Packages

  • Update npm dependencies to fix issues reported by audit. (67708)

Various

Extensibility

  • Add ability to show drop cap setting in paragraph block by default. (45994)
  • DataViews: Move template and pattern title fields. (67449)
  • DataViews: Update usePostFields to accept postType. (67380)

PluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party.

  • Only override REST server for older WP versions. (67779)

NUX

  • Welcome guide headline update. (67654)

Block Locking

  • Simplify description and option names in the Lock modal dialog. (67437)

First-time contributors

A colossal kudos to all the first-time contributors who submitted the following PRs:

Contributors

Finally, thanks to everyone who gave their time, code, reviews and ideas to Gutenberg 19.9:

@aaronrobertshaw @afercia @ajlende @akasunil @AKSHAT2802 @benazeer-ben @benniledl @carolinan @cbravobernal @desrosj @dhruvang21 @dougwollison @ellatrix @getdave @gigitux @gziolo @hbhalodia @himanshupathak95 @Infinite-Null @jeryj @jsnajdr @juanfra @louwie17 @Mamaduka @manzoorwanijk @matiasbenedetto @mcsf @michalczaplinski @miminari @mirka @ndiego @ntsekouras @oandregal @ockham @PARTHVATALIYA @ramonjd @SainathPoojary @SantosGuillamot @sarthaknagoshe2002 @snehapatil2001 @Soean @Sukhendu2002 @t-hamano @talldan @tellthemachines @TylerB24890 @tyxla @up1512001 @vipul0425 @yogeshbhutkar @youknowriad

See you next year for Gutenberg 20.0! 🎉

Thanks to @annezazu, @bernhard-reiter, @joen, @isabel_brison and @ndiego who helped with this release.

#block-editor, #core-editor, #gutenberg, #gutenberg-new

What’s new in Gutenberg 19.8? (04 December)

“What’s new in GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/…” posts (labeled with the #gutenberg-new tag) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, here’s an overview of different ways to keep up with Gutenberg and the Editor.



Gutenberg 19.8. has been released and is available for download!

The latest release of the Gutenberg pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. entails a myriad of user experience improvements for selecting section styles, image manipulation and font handling. The DataViews layouts also received important improvements. 

Table of Contents

Section styles selector in toolbar 

In zoom-out mode, users can now apply different sections styles and designs directly from the toolbar, cycling through them and inspecting them in the context of the rest of the page. This enhancementenhancement Enhancements are simple improvements to WordPress, such as the addition of a hook, a new feature, or an improvement to an existing feature. streamlines the decision-making and production process. (#67140)

Font family preview in dropdown

Another user experience improvement can be found in the list of fonts: Each font family is now previewed in the font picker dropdown and gives users a better indication as to what the font will look like. (67118)

The outcome of the Image manipulation methods are now better communicated in the blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. editor. The success notices are now displayed at the bottom of the editor. The notices also come with a handy Undo link to revert to the original if necessary. (67314)(67312)

Other Notable Highlights

DataViews improvements

This release also contains some Data View improvements. For instance,  the table layout received density options: A user can modify the amount of whitespace that is displayed per row on three levels: comfortable, balanced and compact.  (67170)  Developers working with the Dataviews can now make use of a new APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. to programmatically  register and unregister fields for the various display methods. (67175). 

Block supports from experimental to stable.

📣 Plugin authors and Theme builders might appreciate the stabilization of certain block support settings and functions. A separate make blogblog (versus network, site) post will explain the ins and outs. For now, you can read about it in two GitHubGitHub GitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the ‘pull request’ where code changes done in branches by contributors can be reviewed and discussed before being merged by the repository owner. https://github.com/ PRs:  (67018) (66918).

Continue reading →

#gutenberg, #gutenberg-new

Update on Phase 3: Collaboration efforts

Over the last year, Phase 3 of the GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/ roadmap has begun to take form and with it comes a need for an update around what’s been done, how to follow along, and what to expect going forward. This post seeks to provide answers at a high level view of these questions. As a reminder Phase 3 is centered around fostering seamless collaboration, tying together the user experience, and streamlining the content management flows to improve the way creators and teams work together within WordPress. As work progresses, feedback is needed and welcomed to ensure broader adoption.

Real-time collaboration

Over the last few months, Kevin Jahns, the author of Yjs, a popular framework for building collaborative applications has been sponsored by Automattic to work on real-time collaboration, after an initial experiment landed. He kicked off his efforts with some research and dialogue in this discussion issue. More recently, he’s pulled together some prototypes ahead of sharing a full proposal for how to proceed. Right now, consider this work as being in a strong experimental stage without a final approach. The next step is to get the initial approach into a PR for folks to give feedback on and discuss openly. 

Below is a demo showing syncing content only relying on HTTPHTTP HTTP is an acronym for Hyper Text Transfer Protocol. HTTP is the underlying protocol used by the World Wide Web and this protocol defines how messages are formatted and transmitted, and what actions Web servers and browsers should take in response to various commands. APIs with the autosave interval set to 3 seconds. Because it relies on HTTP APIs, this demo would work on all WordPress instances:

Going a step further, you can see more demos in a recent update including adding y-webrtc into the experience to show how real time collaboration would work for users who can establish a peer-to-peer WebRTC connection.

Follow along in this dedicated GitHub issue and/or in the #feature-realtime-collaboration slackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/ channel.

Async collaboration: In-line comments

An initial experiment for block-level inline comments landed with Gutenberg 19.6, breaking ground on the first of many async collaboration upgrades. At this point, another iteration on this initial feature is already planned and underway to refine the current experience further. If you’d like to help test and shape the feature further, stay tuned for a dedicated call for testing or start testing today with this WordPress Playground instance and open issues in the Gutenberg GitHubGitHub GitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the ‘pull request’ where code changes done in branches by contributors can be reviewed and discussed before being merged by the repository owner. https://github.com/ repository. The aim is to get early feedback and quickly iterate in order to land this new feature in an upcoming major WordPress release. Below is a look at the near term design slated to be shipped next with visuals for adding a comment, leaving a comment, toggling to see resolved comments, and the resulting view when looking at resolved comments:

Follow along in this dedicated GitHub issue. 

Adminadmin (and super admin) redesign: DataView & DataForm

DataViews is the foundational component of the initial overall admin design efforts. By design, these views are being built out only in the Site Editor, with a few efforts branching out including an experiment for a new, separate Posts experience using Data Views and an early Media Library powered by Data Views proof of concept.  

As a next step of the initial development of DataViews, the more recent DataForm API was later introduced in Gutenberg 18.8 with the aim to reduce expected duplication to create forms in Data Views. Work has continued progressively from there with DataViews and DataForm components influencing each other’s development. You can view each in their respective Storybook views: DataViews and DataForm.

Both of these components have been created with extensibility at the heart of everything being built! For now, pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. and agency developers can already start using the DataViews component for their WordPress customizations with two different Developer Blogblog (versus network, site) tutorials to get you started: Using Data Views to display and interact with data in plugins and Actions from Data Views: Adding images to the Media Library. If you want to go on a deeper dive, watch a recent hallway hangout that goes through both of these components with folks actively working on them. Expect a continual focus on extensibility as these components evolve. Below is a look at how DataViews comes together with the DataForm work with an easy option to quick edit within one’s pages:

Follow along in this dedicated DataViews component issue and this DataForm component issue. For early design work in this area and beyond, check out the biweekly design updates.


Thanks to @priethor @youknowriad @4thhubbard @matveb for reviewing this post and for @joen and @jameskoster for the design assets.

#gutenberg, #phase-3

What’s new in Gutenberg 19.7? (20 November)

“What’s new in GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/…” posts (labeled with the #gutenberg-new tag) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, here’s an overview of different ways to keep up with Gutenberg and the Editor.



Gutenberg 19.7 has been released and is available for download!

  1. Global Styles available on the main site editor sidebar
  2. Swifter hiding & showing the template
  3. Set image blocks as featured image
  4. Changelog
  5. First-time contributors
  6. Contributors

Global Styles available on the main site editor sidebarSidebar A sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme.

The site editor sidebar is getting increasingly powerful, serving as the entry point to manage all-things your site. Up until this version, the styles panel offered limited style settings, focusing on style variations, color palettes, and typographies. Gutenberg 19.7 changes this by introducing a full-fledged Global Styles panel in its place, giving users site-wide granular control on styles at the top level.

Swifter hiding & showing the template

Switching between editing your site templates and content pages should be as smooth and seamless as possible; sometimes, you need to focus on the post content and hide the rest of the template. This was previously possible in the post settings, but now it is much easier thanks to the `Show template` toggle directly on the preview dropdown in the top toolbar.

Featured images offer a nice touch in external previews, making them more attractive to potential readers. However, it can be easy to forget to set one! To help set featured images more easily, image blocks now offer a dropdown action to directly set them as the featured image of the post or page containing the blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience..

Continue reading →

#gutenberg, #gutenberg-new

What’s new in Gutenberg 19.6? (6 Nov)

“What’s new in GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/…” posts (labeled with the #gutenberg-new tag) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, here’s an overview of different ways to keep up with Gutenberg and the Site Editor project (formerly called Full Site Editing).


Gutenberg 19.6 has been released and is available for download!

This release includes 193 PRs from 55 contributors, and includes one really exciting experimental feature, inline comments!

Experimental inline comments

Experimental inline comments are available as an experimental feature in  Gutenberg. Users will be able to comment on top of blocks, only in non-published posts. In order to activate them, go to Gutenberg > Experiments and enable the BlockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. Comments checkbox.

Example of experimental inline comments feature.

Code quality, bugbug A bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority. fixes and build tooling

The release includes some improvements on the overall site editing experience:  a keyboard shortcut for zoom out (66400), a cleaner layout (66255), and a new color tab (65692) for the style book.

The client-side media processing work has started (64845), but keep in mind that this new package is private and experimental.

Also, a few ReactReact React is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces. https://reactjs.org Compiler errors have been fixed and packages now use npm workspaces (65681).

Changelog

Enhancements

Components

  • Add elevation tokens to storybook. (66122)
  • Add foundations:Elevation to storybook. (66124)
  • Add radius foundation and tokens to storybook. (66219)
  • Combobox, FormTokenField: Show message when no matches found. (66142)
  • Storybook: Organizes components under ‘Utilities’. (66210)
  • Tabs: Expose active tab item props, use ariakit prop types. (66223)
  • Tabs: Remove custom logic. (66097)
  • DropdownMenuV2: Rename to Menu. (66289)

Block Library

  • Add Transformation from Separator to Spacer. (66230)
  • Add lightbox option in gallery block link control. (64014)
  • Archives: Add border block support. (63400)
  • Border support added to comments. (66354)
  • Cover Block: Add Image Resolution options. (62926)
  • HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. Block: Force HTML preview in view mode. (66440)

Zoom Out

  • Add keyboard shortcut in editor. (66400)
  • Iterate zoom out shuffle into a more visual control. (66194)
  • Use the zoom-level value to scale the iframeiframe iFrame is an acronym for an inline frame. An iFrame is used inside a webpage to load another HTML document and render it. This HTML document may also contain JavaScript and/or CSS which is loaded at the time when iframe tag is parsed by the user’s browser.. (66280)

Site Editor

  • Remove synchronization of canvas mode into store. (66213)
  • Style Book: Clean up layout. (66255)
  • Update site icon and title position. (66171)
  • Editor Interface: Remove small headerHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes. from global styles/pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. sidebarSidebar A sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme.. (64474)
  • Remove purple coloring from DocumentBar and PostCard. (66451)
  • CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. Data: Add the ‘getEntitiesConfig’ resolver. (65871)
  • BlockGroupToolbar: Better i18ni18n Internationalization, or the act of writing and preparing code to be fully translatable into other languages. Also see localization. Often written with a lowercase i so it is not confused with a lowercase L or the numeral 1. Often an acquired skill. context for toolbar labels. (66211)
  • Set ResizableEditor height based on border-box. (66342)
  • Add align-item related icons. (66242)
  • Stabilize isPreviewMode flag. (66149)

Data Views

  • Fix alignment of action items in list layout. (66273)
  • Templates: Hide media field in list view. (66573)

Global Styles

  • Backportbackport A port is when code from one branch (or trunk) is merged into another branch or trunk. Some changes in WordPress point releases are the result of backporting code from trunk to the release branch.: Caching of global styles for blocks from core. (66349)
  • Style Book: Add color tab. (65692)

Real-time Collaboration

  • Inline Commenting: Disable comments on published posts for now. (66583)

REST APIREST API The REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think “phone app” or “website”) can communicate with the data store (think “database” or “file system”) https://developer.wordpress.org/rest-api/

  • Backport from WordPress core: Improvements for the post format query loopLoop The Loop is PHP code used by WordPress to display posts. Using The Loop, WordPress processes each post to be displayed on the current page, and formats it according to how it matches specified criteria within The Loop tags. Any HTML or PHP code in the Loop will be processed on each post. https://codex.wordpress.org/The_Loop filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output.. (66037)

Build Tooling

  • Create Block: Adds --target-dir flag to allow the tool to target where to scaffold. (53781)
  • Scripts: Add build-blocks-manifest command. (65866)
  • Scripts: Add BlueOak-1.0.0 license to GPL2 compatible. (66139)
  • WP Scripts: Add a --root-folder argument to the plugin-zip command. (61375)

Bug Fixes

Zoom Out

  • Disable zoom out toggle button when Style Book is open. (66228)
  • Don’t switch editor mode when changing entities. (66452)
  • Fix scaling animation for device previews. (66132)
  • Fix zoom out not persisting while switching between editor and code editor. (65932)
  • Fix zoom out shortcut on Windows. (66506)
  • Fix: Activate zoom out on large viewport. (66308)
  • Hide slots and grouping buttons. (66243)
  • Remove zoom-out toolbar. (66039)
  • Resets the Zoom on viewed/edited entity change. (66232)
  • Revise zoom layout shift fix. (66390)
  • Zoom Out: Rely on zoom-level instead of zoom-out mode. (66141)
  • Zoom Out: Fix bouncy drop zones. (66399)

Block Editor

  • Block inserter: Prevent editor from crashing if blockType.parent is a string. (66234)
  • Block toolbar: Account for scrollable blocks that affect the position of the block toolbar. (66188)
  • Fix extra scrollbar appearing when searching in the inserter. (66229)
  • Fix: Show paragraph block variations in rich text inserter. (66318)
  • Group: Fix padding select. (65857)
  • Link Shortcut: Only trigger the link shortcut if there’s a text selection. (66056)
  • Remove relative position from sidebar tabpanel. (66267)
  • Rich text: Remove empty file. (66553)
  • Block editor: Self nesting and circular nesting block fix. (66121)
  • Post Editor: Set the default value of the editorTool to edit. (66636)

Components

  • ColorPalette: Prevent overflow of custom color button background. (66152)
  • Fix: Text overflow in Patterns filter. (66504)
  • RadioGroup: Fix arrow key navigation in RTL. (66202)
  • Tabs and TabPanel: Fix arrow key navigation in RTL. (66201)
  • Tabs and ToggleGroupControl: Round indicator size. (66426)
  • Tabs: Fix animation timings. (66198)
  • Tabs: Override tablist’s tabindex only when necessary. (66209)
  • Tabs: Restore vertical alignment for tabs content. (66215)
  • Tabs: Update indicator more reactively. (66207)
  • SpacingSizesControl: Use generic label for linked button. (66304)

i18n

  • Miscellaneous i18n fixes. (66510)
  • Remove most of the occurrences of the verb toggle. (66371)

Post Editor

  • Always force iframe in pattern editor. (65887)
  • Editor: Multi-entity saving: Show correct count of entities to be saved. (66482)
  • Fix : “Set featured imageFeatured image A featured image is the main image used on your blog archive page and is pulled when the post or page is shared on social media. The image can be used to display in widget areas on your site or in a summary list of posts.” button border flashes on focus. (66092)
  • Fix Parent Check Condition in buildTermsTree. (66006)
  • Fix: Improve the DocumentBar post type label for the Homepage and Posts Page cases. (66355)
  • PostTaxonomiesFlatTermSelector: Restore space between tagtag A directory in Subversion. WordPress uses tags to store a single snapshot of a version (3.6, 3.6.1, etc.), the common convention of tags in version control systems. (Not to be confused with post tags.) list and most used tags. (66566)
  • Typo metaboxMetabox A post metabox is a draggable box shown on the post editing screen. Its purpose is to allow the user to select or enter information in addition to the main post content. This information should be related to the post in some way. pane is a metaMeta Meta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. box panel. (66502)

Block Library

  • Block registration: Normalize blockType.parent to array. (66250)
  • Button Block: Apply Stretch Styles Correctly. (64770)
  • Buttons: Fix the initial white space in nofollow rel. (66303)
  • Fix – Image block: Aspect ratio not responding when dimensions are not set. (66217)
  • Navigation block: Fix block appender size. (66153)
  • Fix the navigation issue inside cover blocks. (66093)

Site Editor

  • Edit Site: Fix canvasMode var. (66316)
  • Fix button hover style in sidebar navigation screen. (66505)
  • Remove toggle verb from post list data views ‘Toggle details panel’. (66334)
  • Revert 66431 (Site editor: Remove “default” adminadmin (and super admin) CSSCSS Cascading Style Sheets.). (66540)
  • Restore block-library editor.css outside canvas. (66556)
  • Fix extraneous scrollbar in device previews. (66494)
  • Global styles: Move preload paths filter to 6.7 (previously 6.8). (66543)
  • Fix comment output in styles. (66439)
  • Site editor: Fix save shortcut. (66423)
  • Preload: Fix multiple regressions around global styles. (66468)

Build tooling

  • Create block: Ensure $slug is replaced with passed slug. (66528)

AccessibilityAccessibility Accessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility)

Post Editor

  • Add featured image alt text. (66189)
  • Fix : Badge Color contrast. (66360)

Block Editor

  • ImageSizeControls: Replace ButtonGroup with ToggleGroupControl. (65386)
  • Improve the link preview accessibility and labels. (60908)

Block Library

  • Search: Replace ButtonGroup usage with ToggleGroupControl. (65340)
  • Remove clip & -webkit-clip-path for downloadable-block-list-item style.scss. (66147)

Global Styles

  • Global styles menu: Avoid visible labels and accessible names mismatch. (65124)

Site Editor

  • Fix Global styles panel header buttons text overlap for ‘Show button text labels’. (63243)
  • Update the speak messages when switching editor modes. (66278)

Performance

Site Editor

  • Remove “default” admin CSS. (66431)
  • Remove content styles outside canvas. (66432)
  • Block Style Variations: Reuse block metadata in WP_Theme_JSON::Get_valid_block_style_variations() for better performance. (66539)
  • Block Bindings: Use getEntityConfig instead of getPostTypes to get available slugs. (66101)

Build Tooling

  • Fix/compare performance with correct branchbranch A directory in Subversion. WordPress uses branches to store the latest development code for each major release (3.9, 4.0, etc.). Branches are then updated with code for any minor releases of that branch. Sometimes, a major version of WordPress and its minor versions are collectively referred to as a "branch", such as "the 4.0 branch".. (66196)

Experiments

  • Add Inline comment experimental flag. (60622)
  • QuickEdit: Add slug field control. (65196)

Data Views

  • Quick Edit: Fix JSJS JavaScript, a web scripting language typically executed in the browser. Often used for advanced user interfaces and behaviors. error when bulk editing pages. (66358)
  • QuickEdit: Add Featured Image Control. (64496)
  • QuickEdit: Add Parent field. (66527)

Documentation

  • BaseControl: Auto-generate readme. (66500)
  • Components: Prevent generated readmes duplicating h1 elements when published. (66180)
  • Correct documentation on display type in flow layouts. (66224)
  • Docs: Interactivity APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. – Add documentation for getServerState() and getServerContext(). (66104)
  • Fix undo/redo Button size in Storybook playground. (66538)
  • Fix: JSONJSON JSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML. Schema Docgen doesn’t work on Windows OS. (66414)
  • ItemGroup: Improve stories to default to bordered and separated. (66191)
  • README: Add Storybook badge. (66529)
  • Remove meetings that no longer occur from Contributor Guide. (66421)
  • Site editor routes: Add documentation for areas and prevent edit area from rendering when canvas is edit. (66309)
  • Update documentation about build process changes. (66428)
  • Docs: Example for getSelectedBlock. (66108)

Code Quality

Block Editor

  • ESLint: Remove explicit react-hooks/exhaustive-deps disabling. (66461)
  • ESLint: Remove various React Compiler mutation violations. (66327)
  • Fix ‘useInstanceId’ hook reference. (66406)
  • Fix React Compiler error for Duotone. (66492)
  • Fix React Complier error for ‘useEventListeners’. (66495)
  • Import only the actually used PostCSS exports. (66379)
  • No need to unlock public actions. (66260)
  • Remove patterns UIUI User interface stylesheet from iframe. (66306)
  • Remove unnecessary Tooltip component from radius control linked button. (66274)
  • Rich Text: Fix React Complier error for ‘useEventListeners’. (66460)
  • Storybook: Add BlockPatternsList story. (66227)
  • Block editor: Remove reusable blocks stylesheet from iframe. (66285)

Components

  • BorderBoxControl: Deprecate 36px default size. (65752)
  • BorderControl: Deprecate 36px default size. (65755)
  • DrodownMenuV2: Rename folder to menu. (66473)
  • ESLint: Stop disabling react-hooks/exhaustive-deps rule. (66324)
  • Fix React Compiler error for ‘useAutocomplete’. (66496)
  • PaletteEdit: Use ItemGroup and Item, and avoid custom styles. (66164)
  • TabPanel: Add 40px size prop to tab Button. (66557)
  • Tabs: Align to standard compound components structure. (66225)
  • Tabs: Simplify styled components code. (66208)

Compose

  • Compose: Fix React Complier error for ‘useCopyToClipboard’. (66444)
  • Composer: Fix React Compiler errors for ‘useDropZone’. (66469)

Dataviews

  • Fields: Fix React Compiler mutation errors. (66464)
  • Fields: Update a few function definitions. (66315)

Interface

  • Interface: Remove duplicate ‘withComplementaryAreaContext’ file. (66348)
  • Interface: Remove unused private API support. (66565)
  • Interface: Use plugin context hook instead of HoC. (66362)

Zoom Out

  • Bundle behavior in block-editor and add story. (66240)
  • Editor: Handle zoom out state via the ‘switchEditorMode’ action. (66262)
  • Fix/html scale code quality. (66181)
  • Make useZoomOut hook private. (66374)
  • Remove double click to exit hook from the block-editor package. (66335)
  • Remove viewport check from useZoomOut hook. (66341)

Post Editor

  • Editor: No need to reset mode when changing device preview types. (66261)
  • Editor: Use plugin context hook in ‘PluginMoreMenuItem’. (66351)
  • Editor: Use plugin context hook in ‘PluginPreviewMenuItem’. (66350)
  • Fix typo after #63669. (66396)
  • Remove leftover JS code from 66451. (66472)

Block Library

  • Cleanup unnecessary notice removal. (66409)
  • ESLint: Fix a couple of React Compiler reassignment errors. (66331)
  • Footnotes: Remove extra callback when parsing content. (66370)
  • Gallery: Fix React Compiler reassignment error. (66408)
  • Table Block: Remove hasArrowIndicator prop. (66204)

Style Book

  • Avoid state/effect combo when generating values. (66446)
  • Fix React Compiler error. (66445)

Global Styles

  • Clean up: Adjust reusable-blocks dependencies. (66302)
  • Fix React Compiler variable mutation error. (66410)
  • Theme JSON: Get_block_nodes – relocate $selectors assignment. (66265)

Interactivity API

  • Interactivity API: Add comments to the deepMerge() function. (66220)
  • Interactivity API: Add tests for handling arrays in deepMerge(). (66218)
  • Interactivity API: Delay block hydration to allow interactive block stores to initialize. ([66772])(https://github.com/WordPress/gutenberg/pull/66772)

Site Editor

  • Prepare route registration by refactoring the site editor router. (66030)
  • Navigation: Improve trigger for fallback navigation. (66478)

Build Tooling

  • Scripts: Refactor to extract license logic. (66179)
  • Plugins: Deprecate ‘withPluginContext’ HOC. (66363)

Tools

Testing

  • Fix [Flaky Test] Entering zoomed out mode zooms the canvas. (66212)
  • Fix end-to-end test for padding appender. (66080)
  • Upgrade Playwright to v1.48. (66296)

Build Tooling

  • Add new private vips package. (64845)
  • Revert “Use npm workspaces for packages”. (66270)
  • Add theme type to the bug report issue template. (63851)
  • Pull request automation: Use full npm install. (66314)
  • Use npm workspaces for packages (second attempt). (66272)

First-time contributors

The following PRs were merged by first-time contributors:

  • @AhmarZaidi: Remove toggle verb from post list data views ‘Toggle details panel’. (66334)
  • @mediaformat: Remove clip & -webkit-clip-path for downloadable-block-list-item style.scss. (66147)
  • @nicolasgalvez: WP Scripts: Add a --root-folder argument to the plugin-zip command. (61375)
  • @poojabhimani12: Add Inline comment experimental flag. (60622)
  • @rinkalpagdar: Border support added to comments. (66354)
  • @rudrakshi-gupta: Add Transformation from Separator to Spacer. (66230)
  • @SH4LIN: GH-66090: Self nesting and circular nesting block fix. (66121)

Contributors

The following contributors merged PRs in this release:

@aaronrobertshaw @afercia @AhmarZaidi @akasunil @andrewserong @arthur791004 @carolinan @cbravobernal @ciampo @dhruvang21 @ellatrix @getdave @gigitux @hbhalodia @jameskoster @jeryj @jsnajdr @juanfra @madhusudhand @MaggieCabrera @Mamaduka @mattrwalker @mcsf @mediaformat @michalczaplinski @mirka @mreishus @ndiego @nicolasgalvez @ntsekouras @oandregal @PARTHVATALIYA @peterwilsoncc @poojabhimani12 @prajapatisagar @ramonjd @renatho @rinkalpagdar @rudrakshi-gupta @ryanwelcher @SantosGuillamot @SH4LIN @sirreal @stokesman @swissspidy @t-hamano @talldan @tellthemachines @torounit @troychaplin @tyxla @vipul0425 @Vrishabhsk @vykes-mac @westonruter @youknowriad @zaguiini

Props to @auareyou for visuals assets, @artemiosans, @welcher, @annezazu for peer review.

#block-editor, #core-editor, #gutenberg, #gutenberg-new

What’s new in Gutenberg 19.5? (23 October)

“What’s new in GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/…” posts (labeled with the #gutenberg-new tagtag A directory in Subversion. WordPress uses tags to store a single snapshot of a version (3.6, 3.6.1, etc.), the common convention of tags in version control systems. (Not to be confused with post tags.)) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, here’s an overview of different ways to keep up with Gutenberg and the Editor.


Gutenberg 19.5 has been released and is available for download!

This release focuses on stabilizing existing features but also brings some improvements to the general UIUI User interface and the zooming editing experience, with 116 PRs from 47 contributors.

  1. Smoother Zoom in/out experience
  2. Other notable changes
  3. Changelog
  4. First-time contributors
  5. Contributors

Smoother Zoom in/out experience

Gutenberg 19.5 most notable enhancements circle around the zooming out -and in!- experience.

For instance, the Edit button from the zoom-out toolbar has been replaced to favor more friendly interactions and reduce visual overload. Apart from the top toolbar toggle for this mode and the ability to double-click to zoom back, which were introduced in recent releases, a new Enter keyboard interaction brings you back in as well.

With all these easy ways to exit the zoomed-out view, the editor will now zoom out when showing the pattern inserter, a use case where showing a general view of your page/site matters more than focusing on individual blocks.

Moreover, this release brings many bugbug A bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority. fixes to make this feature as stable and solid as possible for the upcoming WordPress 6.7. And the zooming transition is now smoother, too!

Other notable changes

  • The editor modes writing and editing, as introduced in Gutenberg 19.4, can now be set as a user preference so that the selected mode persists even after exiting the editor or reloading the page.
  • BlockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. bindings can now be used on the widgets screen, too. Check out the original pull request to learn more, or keep tuned to the Developer Blogblog (versus network, site) for more comprehensive examples!
  • You might notice some icon polishing here and there, like the update to the hidden icon and the new upload and download cloud icons.
Read more: What’s new in Gutenberg 19.5? (23 October)

Changelog

Enhancements

General interface

  • Remove the verb Toggle from the Block Inserter button. (65983)
  • Write/Design tool: Persist as a user preference. (65945)
  • Update “hidden” icon to be clearer, and invert logic as used in Data Views. (65914)
  • Update cloud upload and add cloud download icon. (65906)

Zoom Out

  • Make zoom transition smoother. (66017)
  • Try zooming out when selecting the patterns tab in the inserter. (65785)
  • Update/replace edit button with enter on selection. (65760)

Global Styles

  • Improve navigation logic for revisionsRevisions The WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision. screen. (65946)

Block bindings

  • Register bindings sources in widgets screens. (65937)

Block Library

  • Cover Block: Refactor setting panel. (65432)

Component Storybook

  • Add type tokens to storybook. (65993)
  • Storybook: Add stub doc on existing colors. (65982)

Bug Fixes

Zoom Out

  • Exit zoom out when mode is changed. (65975)
  • Fix scaling issues. (65998)
  • Fix zoom reflow by replacing border with padding. (66012)
  • Focus first section root block if no selected block and tabbing to zoom out canvas. (65843)
  • Make zoom out vertical toolbar consistent. (65627)
  • Polish zoom out inserter. (66110)
  • Position scaled htmlHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. within available container space. (66034)
  • Restores setting zoom out mode to useZoomOut hook. (65999)
  • Use consistent canvas frame spacing on device preview and zoom out. (66018)
  • Zoom layout shift: Second alternate fix. (66041)

Block Library

  • Code block: Set LTR direction for RTL languages. (65891)
  • Fix duotone on parallax/repeated featured imageFeatured image A featured image is the main image used on your blog archive page and is pulled when the post or page is shared on social media. The image can be used to display in widget areas on your site or in a summary list of posts. cover blocks. (65929)
  • Fix: Embed Block: Match HTML in the editor and frontend. (65478)
  • Hide grid visualizer when grid is template locked or block editing mode is not default. (66065)
  • Post Content Block: Fix conflictconflict A conflict occurs when a patch changes code that was modified after the patch was created. These patches are considered stale, and will require a refresh of the changes before it can be applied, or the conflicts will need to be resolved. between clearFix and focus ring in the editor. (65364)
  • Post Content: Fix display of block support styles. (66003)
  • Post Terms: Fix fatal error when ‘get_the_term_list’ returns ‘WP_Error’. (65848)
  • Query LoopLoop The Loop is PHP code used by WordPress to display posts. Using The Loop, WordPress processes each post to be displayed on the current page, and formats it according to how it matches specified criteria within The Loop tags. Any HTML or PHP code in the Loop will be processed on each post. https://codex.wordpress.org/The_Loop: Fix isControlAllowed and isTemplate combined logic. (65984)
  • Query Loop: Fix query type indicator. (65877)
  • Revert “Update z-index hierarchy”. (66074)

Block bindings

  • Accept client ID as parameter for useBlockBindingsUtils. (65818)
  • Allow label override when it is defined in client registration. (66160)
  • Bootstrap server sources earlier. (66058)
  • Fix: Don’t render image when src attribute is empty. (66004)
  • Allow the field types matching attribute types in bindings. (66174)

Global Styles

  • Always preview style variations using desktop device type. (66023)
  • Improve Navigator usage in typography panel. (65942)
  • Leave screen if current shadow entry gets deleted. (65935)
  • PaletteEdit: Dedupe palette element slugs. (65772)
  • List all active fonts in the typography section. (65806)

Block Editor

  • Fix DropZone class names on drop. (65798)
  • Fix padding appender hook. (66143)
  • Memoize pattern objects returned from getAllowedPatterns. (66159)
  • Fix rich text toolbar corners. (66163)
  • BlockCanvas: Fix the height prop and width of the block editor. (65977)

Components

  • Fix : Secondary Button Transition. (66045)
  • Global Styles: Fix overflow caused by RangeControl tooltip. (65875)
  • ToggleGroupControl: Don’t set value on focus after a reset. (66151)
  • Fix: Add missing post.slug dependency to useMemo. (66125)

Interactivity APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways.

  • Allow “default” suffix values. (65815)
  • Correctly handle lazily added, deeply nested properties with deepMerge(). (65465)
  • Improvements to the experimental full-page navigation. (64067)

Site Editor

  • Fix site editor back button visual regressions. (66166)
  • Zoom Out: When double clicking a template while zoomed out , reset zoom level instead of showing dialog. (65963)

CSSCSS Cascading Style Sheets. & Styling

  • Editor: Prevent wrapping text when showing icon labels in headerHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes.. (66038)
  • Update z-index hierarchy. (65626)

Data Views

  • Data Views list layout: Revise for improved text truncation. (65376)
  • Fix: Pattern rendering issue. (66022)

Extensibility

  • Rename wp_register_block_template() to register_block_template(). (65958)
  • Fix: Return result from wp_register_block_template function. (66102)

Post Editor

  • Fix “typewriter” spacing style application. (65885)
  • Add argument with post ID to the editor.savePost hook. (66165)

AccessibilityAccessibility Accessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility)

Post Editor

  • Fix metaMeta Meta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. boxes accessibility. (65466)
  • Fix navigate regions shortcuts on the back button WP logo slot. (63611)
  • Improve PostURL terminology and accessibility. (63669)
  • Match visible label of search inputs with their actual label. (65458)

Components

  • Fixed : Modal dialog: Small improvement for elementShouldBeHidden. (65941)
  • ToggleGroupControl: Don’t autoselect option on first group focus. (65892)
  • Tooltip: Add aria-describedby to anchor only if not redundant. (65989)

Typography

  • Revert the “Manage fonts” button in Global Styles. (66107)

Performance

Interactivity API

  • Leverage scheduler.yield in splitTask when available. (66001)

Theme JSONJSON JSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML.

  • Backportbackport A port is when code from one branch (or trunk) is merged into another branch or trunk. Some changes in WordPress point releases are the result of backporting code from trunk to the release branch. from WordPress CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.: improve performance of WP_Theme_JSON::Merge when merging background styles. (66002)

Documentation

  • Add heading level curation documentation. (66076)
  • Components: Set up README auto-generator. (66035)
  • Contrast notes: Update 4.6:1 note with further context. (66168)
  • Data-basics/4-building-a-create-page-form is ready now. (66100)
  • Docs: env: Expand examples of path syntax. (65972)
  • Updated several typos in client-assets.php file. (66084)
  • Use correct label in PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher Backport documentation. (65908)
  • add: Usage examples in core editor documentation. (63768)
  • Consistent with block-development-examples data-basics-59c8f8. (65995)

Code Quality

  • .screen-reader-text CSS update for responsive-block-control style.scss. (66145)
  • Add missing CHANGELOG entries for #64067. (66120)
  • Button: Move to stricter lint rule for 40px size adherence. (65840)
  • Private APIs: Remove obsolete try/catch block. (65898)
  • Remove clip and -webkit-clip for block-library common.scss. (66144)
  • Remove unused select toolbar code. (65834)
  • Simplify logical expression in InitPatternModal. (65922)
  • Theme JSON: Remove redundant check and relocate $selectors assignment. (66154)
  • Type the router package. (65854)
  • Update jsdom to 25.0.1. (65879)
  • Interactivity: Update preact packages. (66008)

Global Styles

  • Edit Site: Avoid recomputing variations when no theme variations. (66137)
  • Edit Site: Remove redundant state in StyleVariationsContainer. (66130)

Block Library

  • Post Terms: Remove unnecessary ‘get_the_terms’ call. (65867)
  • Query Loop Block: Remove redundant sticky state. (66126)

Block Editor

  • Cleanup AutoBlockPreview render memoization of BlockList. (66060)
  • Use shallow memo for prioritized inserter blocks. (65737)

Components

  • Clean up Tabs animation logic. (65878)
  • SearchControl: Deprecate onClose prop. (65988)

Post Editor

  • Block Visibility: Add end-to-end test. (65880)

Zoom Out

  • Fix components coding standards in Zoom Out Toolbar. (65858)

Gutenberg pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party.

  • Correct capabilitycapability A capability is permission to perform one or more types of task. Checking if a user has a capability is performed by the current_user_can function. Each user of a WordPress site might have some permissions but not others, depending on their role. For example, users who have the Author role usually have permission to edit their own posts (the “edit_posts” capability), but not permission to edit other users’ posts (the “edit_others_posts” capability). for the Experiments page. (66118)

Tools

Testing

  • Add an end-to-end test to check the interactions in write mode. (65819)
  • Composite: Add legacy unit tests to stable version. (65952)
  • Fix end-to-end Storybook configuration. (66089)
  • Tests: Add unit tests for image rendering. (66010)
  • Zoom out: End-to-end test – zoomed out mode zooms the canvas. (65943)
  • e2e: Fix Block Visibility test. (65939)

Build Tooling

  • Dedupe npm packages. (65913)
  • Update and align babel dependencies version. (65949)
  • Update node-fetch to 2.7.0. (65957)
  • Update npm lockfile to version 3. (65923)
  • Upgrade browserslist and webcompat data packages. (65926)

First-time contributors

The following PRs were merged by first-time contributors:

Contributors

The following contributors merged PRs in this release:

@aaronrobertshaw @afercia @ajlende @akasunil @Aljullu @andrewserong @AnmolVerma404 @ciampo @DaniGuardiola @dhruvang21 @draganescu @getdave @hbhalodia @jameskoster @jasmussen @jeryj @jsnajdr @leemyongpakva @MaggieCabrera @Mamaduka @matiasbenedetto @matt-west @mcsf @mediaformat @michalczaplinski @mikachan @mirka @ndiego @ntsekouras @ramonjd @renatho @richtabor @rmccue @sabernhardt @SantosGuillamot @shail-mehta @sirreal @stokesman @t-hamano @talldan @troychaplin @tyxla @up1512001 @vk17-starlord @Vrishabhsk @westonruter @youknowriad


Thanks to @joen for the release assets and @cbravobernal for the peer review.

#gutenberg #gutenberg-new

What’s new in Gutenberg 19.4? (9 Oct)

“What’s new in GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/…” posts (labeled with the #gutenberg-new tag) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, here’s an overview of different ways to keep up with Gutenberg and the Site Editor project (formerly called Full Site Editing).


Gutenberg 19.4 has been released and is available for download!

This release includes 186 PRs from 54 contributors, and includes several exciting features such as new Write / Design modes and BlockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. Bindings editor APIs.

New Write / Design modes

The Edit and Select modes are now called Write and Design modes.

In Write mode, you can focus solely on writing, with all layout options hidden from the sidebarSidebar A sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme..

If you want to adjust colors, sizes, create columns, and more, switch to Design mode!

Block Bindings Editor APIs are public

Gutenberg 19.4 and WordPress 6.7 will allow developers to use certain block binding APIs that were previously private and used only in CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.. A dev notedev note Each important change in WordPress Core is documented in a developers note, (usually called dev note). Good dev notes generally include a description of the change, the decision that led to this change, and a description of how developers are supposed to work with that change. Dev notes are published on Make/Core blog during the beta phase of WordPress release cycle. Publishing dev notes is particularly important when plugin/theme authors and WordPress developers need to be aware of those changes.In general, all dev notes are compiled into a Field Guide at the beginning of the release candidate phase. and documentation will be published for the WordPress 6.7 release, but here is an overview:

  • getBlockBindingsSource, getBlockBindingsSources: The first retrieves a specific block binding source and its properties, while the second retrieves a list of all block binding sources.
  • updateBlockBindings: Similar to updateBlockAttributes, this function allows you to create or remove connections between a block and any source.
  • removeAllBlockBindings: Removes all connections from a block to any source.
  • registerBlockBindingsSource, unregisterBlockBindingsSource: Enables registering and unregistering block bindings in the editor. Registering them in the editor allows modification of source fetching and editing.

Other Notable Highlights

There are some improvements too that are worthy to mention like:

  • Comment block components (e.g., author name, date, content, pagination) and Query block components (e.g., no results, pagination, title) will now have previews when hovered over in the inserter panel.
  • Additionally, the BorderBoxControl, BorderControl, and BoxControl components are now considered stable.(65469, 65475, 65586)
  • Also the filters PreSavePost and SavePost are now stable. (64198)

Not to mention all the bugs fixed that you can check in the changelog below.

Changelog

Enhancements

Block Library

  • Added keywords to query loopLoop The Loop is PHP code used by WordPress to display posts. Using The Loop, WordPress processes each post to be displayed on the current page, and formats it according to how it matches specified criteria within The Loop tags. Any HTML or PHP code in the Loop will be processed on each post. https://codex.wordpress.org/The_Loop block. (65515)
  • Added: DropZone when sitelogo is present. (65596)
  • AvatarAvatar An avatar is an image or illustration that specifically refers to a character that represents an online user. It’s usually a square box that appears next to the user’s name.: Add block example. (65509)
  • Buttons: add box-sizing:Border-box rule. (65716)
  • Comment Author Name: Add block example. (65558)
  • Comment Content: Add block example. (65559)
  • Comment Date: Add block example. (65632)
  • Comment Edit/Reply Links: Add block examples. (65601)
  • Comment Pagination: Add previous and next link block examples. (65633)
  • Comments Pagination Numbers: Add block example. (65635)
  • Comments Title: Add block example. (65557)
  • File block: Allow content only editing. (65787)
  • Navigation block: Use apply_block_hooks_to_content(). (65703)
  • Post Navigation Link: Add block examples. (65552)
  • Query No Results: Add block example. (65555)
  • Query Pagination Numbers: Add block example. (65636)
  • Query Pagination: Add block example. (65556)
  • Query Title: Add block example. (65554)
  • Revert: Time To Read: Add block example. (65510)
  • Table of Contents: Try maintaining block example attributes. (65549)
  • Term Description: Add block example. (65553)
  • Time To Read: Add block example. (65512)

Components

  • Light branding for the reference site. (65764)
  • BorderControl: Use __next40pxDefaultSize prop for Reset button. (65682)
  • Composite: Always await initial render setup in unit tests. (65823)
  • DatePicker: Use compact button size. (65653)
  • Guide: Update finish button to use the new default size. (65680)
  • Navigator: Add support for exit animation. (64777)
  • Remove useEvent from components package. (65388)
  • Simplify MenuGroup component styles. (65561)
  • Storybook: Allow for case-agnostic filtering of icons. (65780)
  • ToggleGroupControl: Improve animation. (65175)
  • Tabs: Tweak sizing and overflow behavior of TabList. (64371)

Zoom Out

  • Add prompt to zoom out separator. (65392)
  • Make sections contentOnly in Zoom Out. (65396)
  • Move the toggle button to before the device preview dropdown. (65446)
  • Only show zoom out inserters on block selection. (65759)

Block Editor

  • Hide block transforms in contentOnly mode for non-content blocks. (65394)
  • Inserter: Always show the list of all patterns in the inserter. (65611)
  • MediaPlaceholder: Use InputControl in URLURL A specific web address of a website or web page on the Internet, such as a website’s URL www.wordpress.org popover. (65656)
  • Use proper named File when uploading external images. (65693)

Data Views

  • DataForm – Add combined fields support. (65399)
  • FilterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. UIUI User interface: Remove popover max height. (65835)
  • Dataviews configuration dropdown: Remove style overrides. (65373)

Post Editor

  • Edit Post: Remove unnecessary effect in InitPatternModal. (65734)
  • Editor: Consistent external media pre-publish image/button sizes. (65668)

Global Styles

  • Editor Canvas: Tweak close button. (65694)
  • Style book: Create static categories. (65430)

Edit Mode

  • Update tools menus with Write / Design order. (65721)

Select Mode

  • Select Mode: Updates to the block toolbar. (65485)
  • Select Mode: Use the content-only behavior in select mode. (65204)

Icons

  • Adds envelope icon. (65638)

Site Editor

  • Global Styles: Remove navigator screen overrides. (65522)
  • Command Palette: “Add new page” within the site editor creates new page in site editor. (65476)
  • Update elevation in the site editor. (65410)

Block bindings

  • Connected blocks, add backdrop-color. (65233)

Extensibility

  • Stabilize the PreSavePost and SavePost filters. (64198)

Base Styles

  • Base styles: Add type tokens. (65418)

Tools

  • Composer: Allow composer/installers 2.x. (65356)

Block hooksHooks In WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same.

  • Hooks: Add support for async filters and actions. (64204)

New APIs

  • Revert “Make wordpress/fields a private package”. (65477)
  • Stabilise role attribute property. (65484)

Block bindings

  • Open the stable editor APIs. (65713)

Components

  • Navigator: Stabilize and export APIs. (64613)

Bug Fixes

Components

  • Block Editor: Validate options for the ‘HeadingLevelDropdown’ component. (65425)
  • Composite: Fix legacy implementation passing store prop. (65821)
  • Composite: Make items tabbable if active element gets removed. (65720)
  • Navigator: Fix isInitial logic. (65527)
  • Restore accidentally removed entries in changelog (components package). (65804)
  • useToolsPanel: Calculate derived state in reducer to prevent too many renders. (65564)
  • useToolsPanel: Calculate menuItems in layout effect to avoid painting intermediate state. (65494)

Zoom Out

  • Fix focus loss when deleting selected block in zoom out mode. (65761)
  • Handle zoom out when changing device preview. (65444)
  • Hide Zoom Out Inserters when dragging into canvas. (65789)
  • Makes spacing consistent in zoom out vertical toolbar. (63994)
  • Remove one occurrence of the verb Toggle from Zoom out control. (65609)
  • Reset zoom out level when device type is changed. (65652)
  • Resize cover block only in normal mode. (65731)

Block Editor

  • Fix unable to remove empty blocks on merge. (65262)
  • Inserter: Fix Block visibility manager. (65700)
  • Link autocompleter: Decode post title HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. entities. (65589)
  • Openverse: Prevent multiple insertions during upload. (65719)
  • Paste Handler: Try to fix pasting text with formatting. (63779)
  • Remove user-select:Text. (65662)
  • Editor: Remove edit template menu item from block settings menu in blocks outside template. (65560)
  • Top Toolbar: Show document bar when no block is selected even if block tools are expanded. (65839)
  • Revert “Allow multi-select on iOSiOS The operating system used on iPhones and iPads. Safari/touch devices”. (65414)

Global Styles

  • Avoid errors when a fontSize preset is not available. (65791)
  • Fix: Shadow/Font size preset panel crashes the editor. (65765)
  • Revert “Font Library: Group fonts by source (#63211)”. (65590)
  • Tweak entity save panel button. (65695)

Block bindings

  • Fix editing protected custom fields in block bindings. (65658)
  • Fix showing bindings field values in theme templates. (65639)
  • Only pass context included in usesContext from rich text component. (65618)
  • Use registry instead of select in canUserEditValue. (65659)

Block Library

  • Categories block: Escape label. (65540)
  • Search block: Reset size correctly when clearing unit control. (65468)
  • Social Links: Fix block appender size. (65769)

Site Editor

  • Fix: Makes edit mode selector persistent in top toolbar mode. (65511)
  • Global styles: Do not navigate twice to home screen when opening the sidebar. (65523)
  • Make resizable frame compatible with RTL languages. (65545)
  • Command Palette: Fix “Add new page” command for hybrid theme. (65534)
  • Export useResizeObserver ReactReact React is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces. https://reactjs.org Native version directly. (65588)
  • Fix useResizeObserver bugs. (65389)
  • Fix aria-checked attribute not set for pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. settings buttons in Options dropdown. (65667)
  • Revert “useToolsPanel: Calculate menuItems in layout effect to avoid painting intermediate state”. (65533)

Focus Mode

  • Limit zoom out toggle to specific post types. (65732)

List View

  • Fix miscolored icons. (65707)

Media

  • Fix output buffering for cross-origin isolation. (65701)

Block Directory

  • Fix downloadable block item alignment. (65677)

Typography

  • Remove additional Typeset screen and surface typesets in the typography panel. (65579)

Widgets Editor

  • Fixed the focus cutoff of the editor buttons in the widgets editor. (65395)

Post Editor

  • Omit metaMeta Meta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. boxes on “design” type posts. (64990)

Data Views

  • Fix grid layout padding on small screens. (64878)

Build Tools

  • Babel preset: Add missing pkg files. (65481)
  • Temp disable test for Classic Block Media issue. (65793)

Select Mode

  • Select Mode: Blocks outside the main sections root should be disabled. (65518)
  • Select Mode: Prevent the inbetween inserter from triggering within sections. (65529)

AccessibilityAccessibility Accessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility)

Post Editor

  • Make the Settings panel toggle button show its keyboard shortcut in its tooltip. (65322)
  • Resizable Editor: Make the editor resizable with arrow keys. (65546)

Components

  • ToggleGroupControl: Fix arrow key navigation in RTL. (65735)

Zoom Out

  • Don’t show tooltip in zoom out toggle button when showIconLabels is true. (65573)

Block Library

  • Improve the Query Loop block display settings labels. (65524)

Block Editor

  • Updates LayoutTypeSwitcher to use ToggleGroupControl. (65498)

Code Quality

  • A11yAccessibility Accessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility): Move script module HTML printing to 6.7 compat. (65620)
  • Update to use a11y script module package in Core. (65539)

Site Editor

  • Update icon in home button. (65497)

Performance

Block Library

  • Script Modules: Centralize (re)registration. (65460)

Block Editor

  • Remove editorMode from blockProps. (65326)
  • Move insertionPoint state to block-editor store/rename existing insertionPoint to insertionCue. (65098)

Documentation

  • Block Bindings: Add @since tagtag A directory in Subversion. WordPress uses tags to store a single snapshot of a version (3.6, 3.6.1, etc.), the common convention of tags in version control systems. (Not to be confused with post tags.) in bindings apis JSDocs. (65796)
  • Block Editor: Fix README for FontFamilyControl component. (65660)
  • Composite: Add “With Tooltip” storybook example. (65817)
  • DataViews documentation: Add high-level graph explaining DataViews and data sources interaction. (65457)
  • Docs/interactivity api router package readme. (62062)
  • Docs: Remove PHPDocPHPDoc (docblock, inline docs) for non-existing parameter. (65640)
  • Navigator: Fix README heading hierarchy. (65763)
  • Packages documentation: Minor typo corrections. (65664)
  • Plugin: Fix small typo in readme.txt file. (65634)
  • RichText: Fix JSDoc block typos. (65607)
  • SelectControl: Add story for prefix slot. (65730)
  • Update JSDoc block for RichText package to-html-string. (65688)
  • Update block-filters.md. (64959)
  • iAPI: Refactor types and add a “Core Concepts – Using TypeScript” guide. (64577)

Code Quality

Components

  • BorderBoxControl: Promote to stable. (65586)
  • BorderControl: Promote to stable. (65475)
  • BoxControl: Promote to stable. (65469)
  • Cleanup unused ToggleGroupControl configuration values. (65456)
  • Fix useInstanceId hook references. (65733)
  • Navigator: Internal refactor in preparation for stabilization. (65671)
  • Navigator: Mark experimental exports as deprecated. (65802)
  • SearchControl: Fix rest props mutation. (65740)
  • ToggleGroupControl: Clean up animation logic. (65808)

Block Editor

  • Button: Add __next40pxDefaultSize in block-editor 6. (65742)
  • Decouple “zoom/scaling the canvas” from zoom out mode (without mode rename). (65482)
  • Don’t memoize ‘getContentLockingParent’ and ‘getParentSectionBlock’ selectors. (65649)
  • Inserter: Update how we compute the actual insertion point for blocks. (65490)
  • LinkControl: Fix unneeded props prop. (65650)
  • Navigator: Use stable export instead of experimental export. (65753)
  • Button: Add __next40pxDefaultSize in dataviews, reusable-blocks, etc. (65715)
  • Fix: Button Replace remaining 40px default size violations [Block Directory]. (65467)
  • Fix: Button Replace remaining 40px default size violations [Block Editor 2]. (65308)
  • Fix: Button Replace remaining 40px default size violations [Block Editor 3]. (65225)
  • Fix: Button Replace remaining 40px default size violations [Block Editor 5]. (65361)
  • Fix: Button: Replace remaining 40px default size violation [Edit Site 1]. (65226)
  • Fix: Button: Replace remaining 40px default size violation [Edit Site 3]. (65309)

Block bindings

  • Only pass usesContext properties to editor APIs. (65661)
  • Refactor passing select and dispatch instead of full Registry. (65710)
  • Unify logic in getPostMetaFields function. (65462)

Post Editor

  • Customize widgets, edit post: Refactor Button to new sizes. (65807)
  • HeaderHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes.: Remove unused property isZoomedOutView in useSelect(). (65628)

Block Library

  • Blocks: Don’t memoize ‘hasContentRoleAttribute’ selector. (65617)
  • Blocks: Update ‘__experimentalHasContentRoleAttribute’ deprecation. (65616)

Global Styles

  • Global style revisionsRevisions The WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision.: Remove unnecessary goTo navigation call. (65810)

Site Editor

  • Edit Site: Fix useLink prop mutation. (65739)

Data Views

  • Migrate store/actions from editor package to fields package. (65289)

Tools

Testing

  • Block Bindings: Refactor end-to-end tests. (65526)
  • GH Actions: Run the tests against PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher 8.3. (65357)
  • Revert “Temp disable test for Classic Block Media issue.”. (65809)

Build Tooling

  • Composer: Prevent a lock file from being created. (65359)
  • Composer: Update minimum required PHPUnit Polyfills. (65355)
  • PHP unit tests: Remove WP_RUN_CORE_TESTS const. (65631)
  • DEWP: Check for magic comments before minification. (65582)
  • DEWP: Handle cyclical module dependencies. (65291)
  • Label enforcer: Add Gutenberg plugin to the list of single required labels. (65253)

First-time contributors

The following PRs were merged by first-time contributors:

Contributors

The following contributors merged PRs in this release:

@aaronrobertshaw @afercia @amitraj2203 @anomiex @auareyou @carolinan @cbravobernal @ciampo @crisbusquets @DaniGuardiola @davy440 @dhruvang21 @djcowan @draganescu @ellatrix @getdave @gigitux @hbhalodia @jameskoster @jasmussen @jeryj @jffng @jrfnl @jsnajdr @juanmaguitar @keoshi @kevin940726 @louwie17 @luisherranz @Mamaduka @manzoorwanijk @matiasbenedetto @michalczaplinski @mirka @mtias @noisysocks @oandregal @ockham @PARTHVATALIYA @peterwilsoncc @philwp @priethor @ramonjd @SantosGuillamot @shail-mehta @sirreal @Soean @spadeshoe @stokesman @swissspidy @t-hamano @talldan @tyxla @vcanales @vipul0425 @youknowriad

Props to @joen for visuals assets, @bph and @ndiego for peer-review

#block-editor, #core-editor, #gutenberg, #gutenberg-new

What’s new in Gutenberg 19.3? (25 September)

“What’s new in GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/…” posts (labeled with the #gutenberg-new tag) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, here’s an overview of different ways to keep up with Gutenberg and the Editor.

Gutenberg 19.3 has been released and is available for download!

A total of 174 PRs were merged in Gutenberg 19.3, with 7 first-time contributors! With WordPress 6.7 rapidly approaching, many contributors are focusing on bugbug A bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority. fixes. However, this release still includes some great features and enhancements, including stabilizing the Zoom Out mode!

  1. Zoom Out Mode
  2. Swap the position of the publish buttons
  3. Use custom block names in inspector controls
  4. Allow opting out of the “Choose a pattern” modal when adding new pages
  5. Automatic phone number linking
  6. Allow dropping multiple images to the image block
  7. Changelog
  8. First-time contributors
  9. Contributors

Zoom Out Mode

The Zoom Out Mode is officially out of the experiment and is available to all users. This new mode allows users to zoom out to edit and create at the pattern level over granular blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. editing. This effort aims to provide a new, high-level approach to building and interacting with your site. Follow the 6.7 iteration issue for more information.

Swap the position of the publish buttons

A nice user experience improvement to swap the “Cancel” and the “Publish” buttons in the pre-publish check panel. Now, users don’t have to move their cursor unnecessarily when publishing. (#65317)

Use custom block names in inspector controls

Uses the custom name for a block in the block inspector controls when available. (#65398)

Allow opting out of the “Choose a pattern” modal when adding new pages

The “Choose a pattern” modal can be distracting for power users who always want to start with a blank page. A new preference toggle disables the modal when adding new pages. (#65026)

Automatic phone number linking

The link field can now be automatically populated with tel: when the selected text is a phone number. (#64865)

Allow dropping multiple images to the image block

Multiple images can now be dropped on an image block, converting it to a gallery block. In addition, dropping multiple file types will each create an appropriate block. (#65030, #65144)

Changelog

Features

Zoom Out

  • Remove experimental flag. (65404)

Enhancements

  • Create Block: Update the minimum required PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher version to 7.2. (65166)
  • DataViews: remove unused .dataviews-view-table__cell-content-wrapper:Empty style rule. (65084)
  • Media Utils: Add TypeScript support and export more utils. (64784)
  • Media placeholders: Add “drag” to the text. (65149)
  • Restore: Move to trashTrash Trash in WordPress is like the Recycle Bin on your PC or Trash in your Macintosh computer. Users with the proper permission level (administrators and editors) have the ability to delete a post, page, and/or comments. When you delete the item, it is moved to the trash folder where it will remain for 30 days. button in Document settings. (65087)
  • Inspector Controls: Use custom block name in inspector controls when available. (65398)
  • Icons: Adds bell and bell-unread icons. (65324)
  • Editor topbar: Reorder the actions on the right. (65163)
  • Patterns: Add opt out preference to the ‘Choose a Pattern’ modal when adding a page. (65026)
  • Locked Templates: Blocks with contentOnly locking should not be transformable. (64917)
  • Block Locking: Add border to Replace item in content only image toolbar. (64849)
  • DataViews: Improve UXUX User experience of bundled views for Pages. (65295)

Components

  • Styling: Apply elevation scale in components package. (65159)
  • Tabs: Improve Tabs indicator animation and related utils. (64926)
  • Modal
    • Add exit animation. (65203)
    • Decrease close button size. (65131)
  • Navigator Screen: Warn if path doesn’t follow a URLURL A specific web address of a website or web page on the Internet, such as a website’s URL www.wordpress.org-like scheme. (65231)
  • Card: Update Card radius. (65053)
  • Combobox Control: Add placeholder attribute. (65254)

Block Library

  • Allow dropping multiple images to the image block. (65030)
  • Categories List block: Add dropdown for taxonomies. (65272)
  • Image: Adds the block controls for uploading image. (64320)
  • Remove colons from control labels. (65205)
  • Terms List block: Add Categories-specific variation. (65434)

Zoom Out

  • Add Zoom Out toggle to editor headerHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes. when experiment enabled. (65183)
  • Add prompt for drag and drop in Patterns tab in Zoom Out mode. (65115)
  • Close inserter on exiting Zoom Out to edit. (65194)
  • Show top level sections in List View. (65202)
  • Try vertical displacement when dragging a pattern between existing patterns/sections. (63896)

Block Editor

  • Link Editing: Automatically add tel to phone number when linking URL. (64865)
  • Drag and Drop: When dragging a mix of video, audio, and image blocks, create individual blocks as appropriate. (65144)
  • URLInput: Replace input with InputControl. (65158)
  • Normalize block inspector controls spacing. (64526)

Post Editor

  • Add new Media section to preferences modal. (64846)
  • DocumentBar: Replace icon with post type label. (65170)
  • Page editor: Double-click to edit template part. (65024)
  • Post publish upload media dialog: Handle more block types. (65122)

Block bindings

  • Populate block context with inherited post type from template slug. (65062)
  • Try gap 0 on attribute items. (65277)
  • Use post metaMeta Meta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. label from register_meta in block bindings workflows. (65099)

Global Styles

  • Refactor site background controls and move site global styles into Background group. (65304)
  • Spacing control: Replace sides dropdwon with link button. (65193)

Interactivity APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways.

  • Refactor context proxies. (64713)
  • Update: Rephrase “Force page reload” and move to Advanced. (65081)

REST APIREST API The REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think “phone app” or “website”) can communicate with the data store (think “database” or “file system”) https://developer.wordpress.org/rest-api/

  • Global Styles: Allow read access to users with edit_posts capabilitiescapability A capability is permission to perform one or more types of task. Checking if a user has a capability is performed by the current_user_can function. Each user of a WordPress site might have some permissions but not others, depending on their role. For example, users who have the Author role usually have permission to edit their own posts (the “edit_posts” capability), but not permission to edit other users’ posts (the “edit_others_posts” capability).. (65071)
  • Query loopLoop The Loop is PHP code used by WordPress to display posts. Using The Loop, WordPress processes each post to be displayed on the current page, and formats it according to how it matches specified criteria within The Loop tags. Any HTML or PHP code in the Loop will be processed on each post. https://codex.wordpress.org/The_Loop / Post template: Enable post format filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output.. (64167)

New APIs

  • Add wordpress/fields package.
    • Introduce the package. (65230)
    • Make the package private. (65269)
  • Interactivity API: Add getServerState() and getServerContext(). (65151)

Bug Fixes

  • Align popover alt variant styling with block toolbar. (65263)
  • Compose: Correctly call timer cleanup in ‘useFocusOnMount’. (65184)
  • Fix some docblockdocblock (phpdoc, xref, inline docs) types related to the Template Registration API. (65187)
  • Fix the issue where block spacing control not shown. (65371)
  • Fix unintentional block toolbar shadow. (65182)
  • Fix: Moving a page to the trash on the site editor does not goes back to the pages list. (65119)
  • Fix: Moving the last page item to the the trash causes a crash. (65236)
  • Preferences: Fix back button on mobile. (65141)
  • Post Summary Panel: Restore height:Auto for toggle buttons. (65362)
  • Fix Tabs styling in Font Library modal. (65330)
  • E2E: Change deprecated social icons for standard in end-to-end. (65312)
  • Typography: Make title blocks apply typographic styles consistently. (65307)
  • Target Hints REST API: Add missing param sanitization. (65280)
  • Interactivity API: Update iterable signals when deepMerge() adds new properties. (65135)
  • Navigation Menus: Typography styling support to the navigation submenu block. (65060)
  • Grid: In RTL languages, the resize handles point in the opposite direction. (64995)
  • Block Locking: Fix Content Only Toolbar icon focus style. (64940)
  • Image: Fix resizing to max width in classic themes. (64819)
  • Meta Boxes: Try split content view. (64351)
  • Distraction Free: Fix blurry edge along editor header. (64277)

Block Library

  • Comments Pagination: Fix warning returned by comments pagination blocks. (65435)
  • Cover: Explicitly set isUserOverlayColor to false when media is updated. (65105)
  • Disallow setting grid block rows/columns to zero. (65217)
  • Fix image block crash. (65222)
  • Fix: Buttons block: Block spacing value does not apply to both vertical and horizontal alignment. (64971)
  • Fix: Embed blocks: Figcaption inserted via toolbar not nested within figure element – #64960. (64970)
  • Image cropping: Skip making an API request if there are no changes to apply. (65384)
  • Comments Pagination: Pass the comments query paged arg to functions get_next_comments_link and get_previous_comments_link. (63698)
  • Query Loop
    • Default to querying posts when on singular content. (65067)
    • Remove is_singular() check and fix test. (65483)

Block Editor

  • Inserter: Fix loading indicator for reusable blocks. (64839)
  • Normalize spacing in Layout hook controls. (65132)
  • Pattern Inserter: Fix pattern list overflow. (65192)
  • Remove reset styles RTL from the iframeiframe iFrame is an acronym for an inline frame. An iFrame is used inside a webpage to load another HTML document and render it. This HTML document may also contain JavaScript and/or CSS which is loaded at the time when iframe tag is parsed by the user’s browser.. (65150)
  • Revert “Block Insertion: Clear the insertion point when selecting a different block or clearing block selection (#64048)” (65208)

Components

  • BoxControl: Unify input filed width whether linked or not. (65348)
  • ComboboxControl: Add more unit tests. (65255)
  • Fix: Button Replace remaining 40px default size violations [Edit widgets]. (65367)
  • Tabs: Fix vertical indicator. (65385)

Block bindings

  • Fix empty strings placeholders in post meta bindings. (65089)
  • Remove key fallback in bindings get values and rely on source label. (65517)
  • Fix passing bindings context to canUserEditValue. (65599)
  • Prioritize existing placeholder over bindingsPlaceholder. (65220)
  • Only use canUserEditValue when setValues is defined. (65565)

Zoom Out

  • Force device type to Desktop whenever zoom out is invoked. (64476)
  • Hide toolbar icon on smaller viewports. (65437)
  • Remove zoom out toggle when editor is not iframed. (65452)

AccessibilityAccessibility Accessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility)

  • A11yAccessibility Accessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility): Add script-module. (65101)
  • Interactivity API: Use a11y Script Module in Gutenberg. (65123)
  • Script Modules API: Print script module live regions HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. in page HTML. (65380)
  • DatePicker: Better hover/focus styles. (65117)
  • Form Input: Don’t use flex-direction: Row-reverse for checkbox field. (64232)
  • Navigation Menus: Remove Warning and add notice for Navigation. (63921)
  • Global Styles: Fix the shadows Range control accessibility and usability. (63908)
  • Block Editor: Fix accessibility of the hooked blocks toggles. (63133)

Post Editor

  • Support keyboard resizing of meta boxes pane. (65325)
  • Swap position of the Pre-publish checks buttons. (65317)

Performance

  • CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. Data: Batch remaining actions in resolvers. (65176)
  • Block Editor: Use static access for selector in ‘useZoomOutModeExit’. (65337)
  • Editor: Optimize global styles permission check. (65177)

Experiments

  • Block bindings REST API: Bring bindings UIUI User interface in Site Editor. (64072)

Documentation

  • Add JSDoc block for getSectionRootClientId in block editor package. (65219)
  • ButtonGroup: Fix story to show what the component does. (65336)
  • DataViews storybook
    • Better styles for combined fields story. (65078)
    • Enable all layouts for combined fields storybook. (65082)
  • Docs: Fix minor typos in Build your first block tutorial. (64961)
  • Docs: Update the content of the API version 3 section in the Block API Reference. (65375)
  • Fix typo in Slot Fills documentation. (65275)

Code Quality

  • Components: Transition to the new 40px default size.
    • Button:
      • Add __next40pxDefaultSize for files in editor 3. (65139)
      • Add __next40pxDefaultSize for files in editor 4. (65140)
      • Add props for buttons in editor 1. (65068)
      • Add props for buttons in editor 2. (65083)
      • Fix: Replace remaining 40px default size violations [Block Editor 4]. (65257)
      • Fix: Replace remaining 40px default size violation [Block library 3]. (65110)
      • Fix: Replace remaining 40px default size violation [Block library 4]. (65143)
      • Fix: Replace remaining 40px default size violation [Block library]. (65075)
      • Fix: Replace remaining 40px default size violation [Edit Site 2]. (65258)
      • Fix: Replace remaining 40px default size violations [Block library 1]. (65033)
      • Fix: Replace remaining 40px default size violations [Block Editor 1]. (65034)
    • BoxControl
      • Add lint rule for 40px size prop usage. (65341)
    • DimensionsPanel: Apply 40px default size to UI when no spacing preset is available. (65300)
  • Add useEvent and revamped useResizeObserver to @wordpress/compose. (64943)
  • DataViews: Use Dropdown for views configuration dialog. (65314)
  • Platform docs: Upgrade dependencies. (65445)
  • Rename edit-post__fade-in-animation and unify keyframe definitions. (65377)
  • Update minimum required version in PHP. (65301)
  • Editor: Use hooksHooks In WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same. instead of HoC in BlockManager. (65349)
  • Data Views Fields: Migrate store and actions from editor package to fields package. (65261)
  • PluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party.: Remove ‘function_exists’ checks for methods with ‘gutenberg’ prefix. (65260)
  • Global Styles: Update REST controller override method and backportbackport A port is when code from one branch (or trunk) is merged into another branch or trunk. Some changes in WordPress point releases are the result of backporting code from trunk to the release branch. changes from Core. (65259)
  • Patterns: Remove unused method returned from ‘mapSelect’. (65073)
  • Embed: Convert EmbedPreview component to functional component. (51325)

Components

  • BoxControl: Fix critical error when null value is passed. (65287)
  • Composite:
    • Deprecate legacy, unstable version. (63572)
    • Remove store prop and useCompositeStore hook. (64723)
    • Stabilize APIs. (63569)
  • @wordpress/components: Add local copy of use-lilius. (65097)

Block bindings

  • Always prioritize using context in post meta source logic. (65449)
  • Improve getRegisteredPostMeta resolver. (65450)
  • Remove extra filtering of empty sources. (65447)

Block Editor

  • Remove the ‘PrivateInserter’ component. (65111)
  • Use the tooltip from a button in ‘ButtonBlockAppender’. (65113)
  • Remove unused css selectors. (65276)

Tools

  • Scripts: Update stylelint dependency and the default configuration. (64828)
  • Styleling config: Fix stylelint configuration missing files for npm. (65313)

Build Tooling

  • Build Plugin: Simplify and improve zip contents. (65232)
  • Build zip artifact on release and wp production branches. (65471)
  • Build: Include Core blocks’ render and variations files. (63311)
  • Script Modules
    • Prepare build for more script modules. (65064)
    • Remove babel from script-modules build. (65279)
    • Remove es-module shims and importmap-polyfill. (65210)
  • Correctly generate PHP files for server-side rendering of blocks on Windows OS. (65248)
  • Packages: Only add polyfills where needed. (65292)
  • Switch from UglifyJS to Terser to build the polyfill script. (65278)

Testing

  • Unit tests: Mock matchMedia to enforce prefers-reduce-motion. (65438)
  • Upgrade Playwright to v1.47. (65156)

First-time contributors

The following PRs were merged by first-time contributors:

Contributors

The following contributors merged PRs in this release:

@aaronrobertshaw @afercia @AKSHAT2802 @Aljullu @andrewserong @carolinan @cbravobernal @ciampo @colorful-tones @creativecoder @DaniGuardiola @DAreRodz @devansh016 @dhruvang21 @ellatrix @farid-hadi @getdave @gigitux @greenworld @gziolo @hbhalodia @jameskoster @jasmussen @javierarce @jeryj @jorgefilipecosta @jsnajdr @kevin940726 @louwie17 @madhusudhand @MaggieCabrera @Mamaduka @mikeybinns @mirka @ntsekouras @oandregal @ockham @peterwilsoncc @rahulharpal1603 @ramonjd @richtabor @rohitmathur-7 @SantosGuillamot @scruffian @sgomes @sirreal @stokesman @swissspidy @t-hamano @talldan @vipul0425 @zaguiini

Props to @jameskoster for the visual assets, @andrewserong, @ramonopoly, and @aaronrobertshaw for help drafting and proofreading this post, and @noisysocks for the release process.

#block-editor, #core-editor, #gutenberg, #gutenberg-new

Gutenberg development practices and common pitfalls

Over the years of working on the GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/ project, we developed some common practices. These help us preserve the quality and the long-term viability of the project. They differ and often contradict what people are used to in other projects (especially outside WordPress CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.).

These practices should be applied during implementation and PR reviews. Sharing and embracing them helps contributors make the right decisions and be more autonomous when working on the project.

This list is non-exhaustive and subject to change. These are guidelines to always keep in mind but shouldn’t be treated as hard rules. Context is always important to consider.

Start APIs as private

Gutenberg is organized in packages. Implementing features means introducing new APIs to one or multiple packages. It’s important to understand that most of the packages‘ APIs are public WordPress APIs. Anything exported from a package and consumed by another package becomes a defacto WordPress APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways.. This API needs to be maintained forever to adhere with the WordPress backwards compatibility strategy. Thus, it’s recommended to start with private APIs.

Be intentional about providing public APIs

Extensibility is important to WordPress. We do want pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. authors to extend what WordPress provides. We also want them to reuse tools that WordPress uses internally. This point can read as a contradiction with the previous one. But what’s important here is that it needs to be intentional. Before making an API public during the feature work, we should ask ourselves these questions:

  • Do we want to allow users to use this API? 
  • And are we willing to support it for the next 10 years without breaking changes? 

If the answer to both these questions is yes, then we can consider making this API public.

Avoid opening APIs for convenience, embrace copy/paste

Sometimes, for convenience and to abide to the DRY principle, we, developers create APIs and abstractions. This is seen as a good practice in most projects. But in the context of Gutenberg and WordPress, it is something to avoid. The cost of maintaining APIs is too high because of the backward compatibility strategy.

Say you have a low-level function or component already available to plugin authors or npm package users. To achieve their use-case, they maybe have to write some duplicate boilerplate code. Creating a higher-level abstraction to avoid the duplication should be avoided as much as possible. It is true that providing a great Developer Experience is important, though. There are cases where a higher-level abstraction is required. The main approach is that we should have very strong arguments for it and be intentional.

Prefer Semantic Extensibility

Plugin authors in WordPress want to be able to extend every piece of the UIUI User interface. They also want to give way too much prominence to their own extensions and upsells. As WordPress history teaches us, this quickly leads to a degraded user experience. Who has never seen a WP Adminadmin (and super admin) with hundreds of notices? Who has never seen a WP Admin with menu items and call to actions competing for the user’s attention?

A non curated set of extensibility APIs can lead to stagnation as well. One example here is the metaMeta Meta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. boxes API in the classic editor and how it created a lot of constraints for the development of the blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. editor. These kinds of APIs prevent iteration and evolution. It becomes very hard to improve the UI and UXUX User experience of these screens. Any change, no matter how small, can lead to breaking changes for plugin authors.

To alleviate these issues, extensibility in Gutenberg is curated and semantic. APIs to register/unregister semantic pieces (blocks, patterns, actions, fields) are preferred. APIs that are too broad and whose purpose is unclear should be avoided. For example: 

  • A slot in the editor headerHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes. is not a very semantic API. It’s unclear what it will be used for. This will prevent any redesign and iteration to the header area of the editor.
  • The ability to set a priority or order to extensions is often an API that we want to avoid. It’s very prone to abuse. Often, plugins authors use these to give priority to their own extensions over what Core provides. It quickly leads to a degraded experience for users.

One package = one clear purpose

Developing features in Gutenberg often involves modifications to multiple packages at the same time. We need to ask ourselves: where should this piece of code live? To answer the question, it’s important to understand the purpose of each package. Here are some common examples:

  • Most of the editor UI is built within the @wordpress/block-editor package. So developers often change this package directly to accommodate their specific needs in the UI. The problem though is that it’s not the sole package responsible for adding UI to the editor. It is important to understand that this package is the Tinymce of Gutenberg. It can be used to build and integrate block editors within WordPress and outside WordPress. It’s a framework to build block editors. If a part of the UI is specific to WordPress, it’s not the right place to make this change. A recent example I noticed here is the addition of a button to the block settings menu. That button was used to open the WordPress editor sidebarSidebar A sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme., but editor sidebars are specific to WordPress block editors.
  • Making a REST APIREST API The REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think “phone app” or “website”) can communicate with the data store (think “database” or “file system”) https://developer.wordpress.org/rest-api/ request in a UI component is another common pitfall that happens often. For example, you may want to build a Language Switcher UI component. And you want it to be reusable in the @wordpress/components package. You can’t use a REST API call within the component to fetch the available languages. The components package is a generic WP agnostic UI components package. So instead, it’s better to have a prop to pass of the available languages instead.

It’s also not recommended to add new packages just to share code between two existing packages. Usually, there’s a better solution to the code sharing problem.  @wordpress/utils package doesn’t exist for a reason. Utility packages are a place where we can just dump shared code without purpose. As mentioned earlier, copy/pasting is not always a bad idea when it comes to code sharing. It is preferable to avoid early abstractions as much as possible.

Measure then optimize

We, developers have a tendency to over optimize our code. Often these optimizations involve adding some complexity to the code, making it harder to maintain. It is better to avoid these early optimizations. Instead, measure the impact of the change you want to perform to validate that the optimization is worth the added complexity. Important metrics are tracked in the codevitals dashboard.

Other random common pitfalls

Besides the principles above that one needs to follow to make the right calls, here are some common pitfalls that we’ve learned to avoid over time:

  • Avoid passing editor settings as inline JSJS JavaScript, a web scripting language typically executed in the browser. Often used for advanced user interfaces and behaviors. from the backend to the frontend. It is a pattern we used heavily early in the project. We should ideally move away from it and prefer a better separation between client and server (use REST API calls).
  • Adding settings to the BlockEditorProvider (and the @wordpress/block-editor package) is ok. But we should be intentional about it: what does the setting mean for third-party block editors? Always remember the block editor framework use case.
  • Be declarative as much as possible. Using state actions and selectors to share UI state is acceptable. But know that it’s risky. It can lead to bugs and race conditions quickly if multiple components compete to set the right state. This happened to us at least in two recent situations:
    • Insertion position: We moved away from declaratively computing the insertion position based on the selected block. We used setInsertionPoint action and state instead. The issue is that the inserting point is now incorrectly set at times. Or it persists as we navigate away…
    • Block editing mode: To support different UI modes for blocks (content-only, locking, template-locked mode, zoom-out mode) we introduced a state to manipulate what we call “block editing mode” using setBockEditingMode action. We now have some hidden bugs because of that. These different modes compete to set the right block editing mode. 
  • Avoid using stores in new packages. Be careful when introducing new data stores. Each time we register a new store, there’s added complexity in the system. Stores are singletons by default, they can only be present once in the page. We do support multiple instances of the same store on the page but it’s not without complexity. We need to extend the global registry. We have also seen that using stores in bundled packages like @worpdress/interface is not a good idea. When a plugin wants to use that package/store it leads to the store trying to be registered twice. The wrong store will be accessed from the components when it happens. 

#gutenberg, #javascript