From 6da1bf4c4c9b879054b475cf2bc96861ffa8d03d Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Wed, 18 Sep 2019 14:44:50 +0200
Subject: [PATCH 001/183] WIP: navigate down in the hierarchy of InnerBlocks
WIP: add hierarchy of click-down
WIP: add hierarchy of click other element same parent
EOD: click-down logic
EOD: click-down logic fix
WIP: dim unfocus element
WIP: add navigate up button on floating toolbar
EOD: change color of FloatingToolbar arrow to white
change focus border color from gray to blue
EOD: click-down logic
lock onFocus on AztecView when block is not selected
change dashed border color
apply style to keep same innerblock size
work with styles
work with styles
adjust borders margin
pass isParentSelected to RichText to unlock onClick event
---
.../src/components/block-list/block.native.js | 37 +++++++++--
.../components/block-list/block.native.scss | 56 ++++++++++++++++-
.../src/components/block-list/index.native.js | 11 +++-
.../components/block-list/style.native.scss | 3 +-
.../src/components/caption/index.native.js | 1 +
.../media-placeholder/index.native.js | 4 +-
packages/block-editor/src/store/selectors.js | 62 +++++++++++++++++++
.../block-library/src/image/edit.native.js | 7 ++-
.../src/media-text/edit.native.js | 1 +
.../src/media-text/media-container.native.js | 1 +
.../block-library/src/video/edit.native.js | 1 +
packages/components/src/icon-button/index.js | 2 +
.../src/components/post-title/index.native.js | 16 ++++-
.../components/post-title/style.native.scss | 4 ++
.../rich-text/src/component/index.native.js | 6 +-
15 files changed, 196 insertions(+), 16 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 456c5fad6ac2ab..f4f82ee304b656 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -40,8 +40,9 @@ class BlockListBlock extends Component {
}
onFocus() {
- if ( ! this.props.isSelected ) {
- this.props.onSelect();
+ const { firstToSelect, isSelected, onSelect } = this.props;
+ if ( ! isSelected ) {
+ onSelect( firstToSelect );
}
}
@@ -117,6 +118,10 @@ class BlockListBlock extends Component {
showFloatingToolbar,
parentId,
isFirstBlock,
+ parentId,
+ isDashed,
+ isDimmed,
+ isGroup,
} = this.props;
const borderColor = isSelected ? focusedBorderColor : 'transparent';
@@ -147,7 +152,13 @@ class BlockListBlock extends Component {
{ showTitle && this.renderBlockTitle() }
{ isValid && this.getBlockForType() }
{ ! isValid &&
@@ -170,9 +181,12 @@ export default compose( [
isBlockSelected,
__unstableGetBlockWithoutInnerBlocks,
getBlockHierarchyRootClientId,
- getBlock,
getBlockRootClientId,
+ getSelectedBlockClientId,
+ getBlock,
getSelectedBlock,
+ getBlockOrder,
+ getFirstToSelectBlock,
} = select( 'core/block-editor' );
const order = getBlockIndex( clientId, rootClientId );
const isSelected = isBlockSelected( clientId );
@@ -198,6 +212,17 @@ export default compose( [
const showFloatingToolbar = isSelected && hasRootInnerBlocks && ! isMediaText && ! isMediaTextParent;
+ const parentId = getBlockRootClientId( clientId );
+ const firstToSelect = getFirstToSelectBlock( clientId );
+
+ const selectedBlockClientId = getSelectedBlockClientId();
+ const isRootSiblingsSelected = getBlockRootClientId( selectedBlockClientId ) === '';
+
+ const isDashed = selectedBlockClientId === parentId;
+ const isDimmed = ! isSelected && ! isRootSiblingsSelected && !! selectedBlockClientId && firstToSelect === clientId && ! isDashed;
+
+ const parentId = getBlockRootClientId( clientId );
+
return {
icon,
name: name || 'core/missing',
@@ -212,6 +237,10 @@ export default compose( [
getAccessibilityLabelExtra,
showFloatingToolbar,
parentId,
+ isDashed,
+ isDimmed,
+ firstToSelect,
+ parentId,
};
} ),
withDispatch( ( dispatch, ownProps, { select } ) => {
diff --git a/packages/block-editor/src/components/block-list/block.native.scss b/packages/block-editor/src/components/block-list/block.native.scss
index e3d18ba3f7c640..63adcee69fbc3f 100644
--- a/packages/block-editor/src/components/block-list/block.native.scss
+++ b/packages/block-editor/src/components/block-list/block.native.scss
@@ -3,12 +3,64 @@
}
.blockContainer {
- padding-left: 16px;
- padding-right: 16px;
+ margin-left: 16px;
+ margin-right: 16px;
padding-top: 12px;
padding-bottom: 12px;
}
+.blockContainerDimmed {
+ opacity: 0.2;
+}
+
+.blockHolderDashedBordered {
+ border-top-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-right-width: 1px;
+ border-style: dashed;
+ border-color: $gray;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 6px;
+ padding-bottom: 6px;
+ padding-bottom: 6px;
+ margin-right: 0px;
+ margin-left: 0px;
+ margin-bottom: 5px;
+ margin-top: 5px;
+ border-radius: 2px;
+}
+
+.selectedInnerGroup {
+ padding-top: 0px;
+ margin-left: 0px;
+ margin-right: 0px;
+}
+
+.margin {
+ margin-left: 9px;
+ margin-right: 9px;
+}
+
+.padding {
+ padding-left: 0px;
+ padding-right: 0px;
+ padding-top: 0px;
+}
+
+.dashedBorderStyle {
+ margin-left: 5px;
+ margin-right: 5px;
+}
+
+.innerBlockContainerFocused {
+ padding-left: 12px;
+ padding-right: 12px;
+ padding-top: 12px;
+ padding-bottom: 0; // will be flushed into inline toolbar height
+}
+
.blockContainerFocused {
padding-left: 16px;
padding-right: 16px;
diff --git a/packages/block-editor/src/components/block-list/index.native.js b/packages/block-editor/src/components/block-list/index.native.js
index 05c2898899ca39..fa5c621dc9c41d 100644
--- a/packages/block-editor/src/components/block-list/index.native.js
+++ b/packages/block-editor/src/components/block-list/index.native.js
@@ -43,7 +43,7 @@ export class BlockList extends Component {
}
blockHolderBorderStyle() {
- return this.props.isFullyBordered ? styles.blockHolderFullBordered : styles.blockHolderSemiBordered;
+ return this.props.isFullyBordered || this.props.hasFullBorder ? styles.blockHolderFullBordered : styles.blockHolderSemiBordered;
}
onCaretVerticalPositionChange( targetId, caretY, previousCaretY ) {
@@ -172,6 +172,7 @@ export default compose( [
getBlockInsertionPoint,
isBlockInsertionPointVisible,
getSelectedBlock,
+ isBlockSelected,
getBlockRootClientId,
} = select( 'core/block-editor' );
@@ -206,6 +207,8 @@ export default compose( [
return ! shouldHideBlockAtIndex;
};
+ const hasFullBorder = !! getBlockRootClientId( selectedBlockClientId ) || isSelectedGroup;
+
return {
blockClientIds,
blockCount: getBlockCount( rootClientId ),
@@ -213,8 +216,10 @@ export default compose( [
shouldShowBlockAtIndex,
shouldShowInsertionPoint,
selectedBlockClientId,
- isFirstBlock,
- selectedBlockParentId,
+ rootClientId,
+ getBlockIndex,
+ isBlockSelected,
+ hasFullBorder,
};
} ),
withDispatch( ( dispatch ) => {
diff --git a/packages/block-editor/src/components/block-list/style.native.scss b/packages/block-editor/src/components/block-list/style.native.scss
index 36be89c4c067cd..c9cd99579413ac 100644
--- a/packages/block-editor/src/components/block-list/style.native.scss
+++ b/packages/block-editor/src/components/block-list/style.native.scss
@@ -58,6 +58,7 @@
border-bottom-width: 1px;
border-left-width: 1px;
border-right-width: 1px;
+ border-radius: 4px;
}
.blockContainerFocused {
@@ -68,7 +69,7 @@
}
.blockHolderFocused {
- border-color: $gray-lighten-30;
+ border-color: $blue-wordpress;
}
.blockHolderFocusedDark {
diff --git a/packages/block-editor/src/components/caption/index.native.js b/packages/block-editor/src/components/caption/index.native.js
index 68e965524c8b87..c093c44c49d593 100644
--- a/packages/block-editor/src/components/caption/index.native.js
+++ b/packages/block-editor/src/components/caption/index.native.js
@@ -30,6 +30,7 @@ const Caption = ( { accessible, accessibilityLabel, onBlur, onChange, onFocus, i
underlineColorAndroid="transparent"
textAlign={ 'center' }
tagName={ '' }
+ isParentSelected={ shouldDisplay }
/>
);
diff --git a/packages/block-editor/src/components/media-placeholder/index.native.js b/packages/block-editor/src/components/media-placeholder/index.native.js
index c4579e78fe6bfa..14348f1e0bf756 100644
--- a/packages/block-editor/src/components/media-placeholder/index.native.js
+++ b/packages/block-editor/src/components/media-placeholder/index.native.js
@@ -115,7 +115,9 @@ function MediaPlaceholder( props ) {
accessibilityHint={ accessibilityHint }
onPress={ ( event ) => {
props.onFocus( event );
- open();
+ if ( props.isBlockSelected ) {
+ open();
+ }
} }>
= 0;
+ if ( hasCommonParent ) {
+ commonParentFirstChild = clientTree[ commonParentIndex - 1 ];
+ }
+ index++;
+ } while ( index < selectedTree.length && ! hasCommonParent );
+
+ return commonParentFirstChild;
+}
+
/**
* Returns the client ID of the block adjacent one at the given reference
* startClientId and modifier directionality. Defaults start startClientId to
diff --git a/packages/block-library/src/image/edit.native.js b/packages/block-library/src/image/edit.native.js
index ce2c1affe275a5..de1eda5e4f675a 100644
--- a/packages/block-library/src/image/edit.native.js
+++ b/packages/block-library/src/image/edit.native.js
@@ -114,7 +114,11 @@ export class ImageEdit extends React.Component {
}
onImagePressed() {
- const { attributes } = this.props;
+ const { attributes, isSelected } = this.props;
+
+ if ( ! isSelected ) {
+ return null;
+ }
if ( this.state.isUploadInProgress ) {
requestImageUploadCancelDialog( attributes.id );
@@ -275,6 +279,7 @@ export class ImageEdit extends React.Component {
onSelect={ this.onSelectMediaUploadOption }
icon={ this.getIcon( false ) }
onFocus={ this.props.onFocus }
+ isBlockSelected={ this.props.isSelected }
/>
);
diff --git a/packages/block-library/src/media-text/edit.native.js b/packages/block-library/src/media-text/edit.native.js
index 3cfb91b48ce949..2e581c992e3636 100644
--- a/packages/block-library/src/media-text/edit.native.js
+++ b/packages/block-library/src/media-text/edit.native.js
@@ -108,6 +108,7 @@ class MediaTextEdit extends Component {
onWidthChange={ this.onWidthChange }
commitWidthChange={ this.commitWidthChange }
onFocus={ this.props.onFocus }
+ isSelected={ this.props.isSelected }
{ ...{ mediaAlt, mediaId, mediaType, mediaUrl, mediaPosition, mediaWidth, imageFill, focalPoint } }
/>
);
diff --git a/packages/block-library/src/media-text/media-container.native.js b/packages/block-library/src/media-text/media-container.native.js
index 0b47812e5f5ac0..7a027a146093b9 100644
--- a/packages/block-library/src/media-text/media-container.native.js
+++ b/packages/block-library/src/media-text/media-container.native.js
@@ -166,6 +166,7 @@ class MediaContainer extends Component {
onSelect={ this.onSelectMediaUploadOption }
allowedTypes={ [ MEDIA_TYPE_IMAGE ] }
onFocus={ this.props.onFocus }
+ isBlockSelected={ this.props.isSelected }
/>
);
}
diff --git a/packages/block-library/src/video/edit.native.js b/packages/block-library/src/video/edit.native.js
index 1a193a521e7032..82c3eb99bfb104 100644
--- a/packages/block-library/src/video/edit.native.js
+++ b/packages/block-library/src/video/edit.native.js
@@ -185,6 +185,7 @@ class VideoEdit extends React.Component {
onSelect={ this.onSelectMediaUploadOption }
icon={ this.getIcon( false, true ) }
onFocus={ this.props.onFocus }
+ isBlockSelected={ this.props.isSelected }
/>
);
diff --git a/packages/components/src/icon-button/index.js b/packages/components/src/icon-button/index.js
index 8c2e361eb2a371..c2a4e7f831bc66 100644
--- a/packages/components/src/icon-button/index.js
+++ b/packages/components/src/icon-button/index.js
@@ -25,12 +25,14 @@ function IconButton( props, ref ) {
tooltip,
shortcut,
labelPosition,
+ fill,
...additionalProps
} = props;
const classes = classnames( 'components-icon-button', className, {
'has-text': children,
} );
const tooltipText = tooltip || label;
+ const iconProps = fill ? { fill } : {};
// Should show the tooltip if...
const showTooltip = ! additionalProps.disabled && (
diff --git a/packages/editor/src/components/post-title/index.native.js b/packages/editor/src/components/post-title/index.native.js
index a47de19cfaa1c3..6b36b0c2fe7fce 100644
--- a/packages/editor/src/components/post-title/index.native.js
+++ b/packages/editor/src/components/post-title/index.native.js
@@ -50,6 +50,7 @@ class PostTitle extends Component {
title,
focusedBorderColor,
borderStyle,
+ isDimmed,
} = this.props;
const decodedPlaceholder = decodeEntities( placeholder );
@@ -57,7 +58,7 @@ class PostTitle extends Component {
return (
{
diff --git a/packages/editor/src/components/post-title/style.native.scss b/packages/editor/src/components/post-title/style.native.scss
index a583018c37e377..416cd4c0ec33b6 100644
--- a/packages/editor/src/components/post-title/style.native.scss
+++ b/packages/editor/src/components/post-title/style.native.scss
@@ -7,3 +7,7 @@
margin-top: 24;
}
+.dimmed {
+ opacity: 0.2;
+}
+
diff --git a/packages/rich-text/src/component/index.native.js b/packages/rich-text/src/component/index.native.js
index 206680d3c87668..031f7e217455ee 100644
--- a/packages/rich-text/src/component/index.native.js
+++ b/packages/rich-text/src/component/index.native.js
@@ -771,6 +771,8 @@ export class RichText extends Component {
__unstableIsSelected: isSelected,
children,
getStylesFromColorScheme,
+ blockIsSelected,
+ isParentSelected,
} = this.props;
const record = this.getRecord();
@@ -820,7 +822,8 @@ export class RichText extends Component {
this.firedAfterTextChanged = false;
}
- const dynamicStyle = getStylesFromColorScheme( style, styles.richTextDark );
+ const dynamicStyle = useStyle( style, styles.richTextDark );
+ const lockOnFocus = blockIsSelected || isParentSelected ? {} : { pointerEvents: 'none' };
return (
@@ -866,6 +869,7 @@ export class RichText extends Component {
disableEditingMenu={ this.props.disableEditingMenu }
isMultiline={ this.isMultiline }
textAlign={ this.props.textAlign }
+ { ...lockOnFocus }
/>
{ isSelected && }
From 6387115cdcd354e076af8a9c36be1389862b2449 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Tue, 8 Oct 2019 09:59:32 +0200
Subject: [PATCH 002/183] WIP: Navigation Dwon in Inner Block
---
.../src/components/block-list/block.native.js | 29 ++++++++++++++---
.../components/block-list/block.native.scss | 31 +++++++++++++------
.../components/block-list/style.native.scss | 3 ++
3 files changed, 49 insertions(+), 14 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index f4f82ee304b656..c6b5b096f2f0cb 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -122,6 +122,10 @@ class BlockListBlock extends Component {
isDashed,
isDimmed,
isGroup,
+ isInnerBlock,
+ isChildOfSameRootBlook,
+ isNestedInnerBlock,
+ isGroupType,
} = this.props;
const borderColor = isSelected ? focusedBorderColor : 'transparent';
@@ -153,11 +157,18 @@ class BlockListBlock extends Component {
{ isValid && this.getBlockForType() }
@@ -221,7 +232,11 @@ export default compose( [
const isDashed = selectedBlockClientId === parentId;
const isDimmed = ! isSelected && ! isRootSiblingsSelected && !! selectedBlockClientId && firstToSelect === clientId && ! isDashed;
- const parentId = getBlockRootClientId( clientId );
+ const isInnerBlock = parentId && firstToSelect !== parentId
+ const isChildOfSameRootBlook = rootBlockId === getBlockHierarchyRootClientId( selectedBlockClientId )
+ const isNestedInnerBlock = !isDashed && rootBlockId === getBlockRootClientId( firstToSelect )
+ const isGroup = hasRootInnerBlocks; //blockType ==='core/group';
+ const isGroupType = blockType.name === 'core/group'
return {
icon,
@@ -240,7 +255,11 @@ export default compose( [
isDashed,
isDimmed,
firstToSelect,
- parentId,
+ isGroup,
+ isInnerBlock,
+ isChildOfSameRootBlook,
+ isNestedInnerBlock,
+ isGroupType,
};
} ),
withDispatch( ( dispatch, ownProps, { select } ) => {
diff --git a/packages/block-editor/src/components/block-list/block.native.scss b/packages/block-editor/src/components/block-list/block.native.scss
index 63adcee69fbc3f..168749a7afee1c 100644
--- a/packages/block-editor/src/components/block-list/block.native.scss
+++ b/packages/block-editor/src/components/block-list/block.native.scss
@@ -9,6 +9,13 @@
padding-bottom: 12px;
}
+.blockContainerInner {
+ margin-left: 0;
+ margin-right: 0;
+ padding-left: 0;
+ padding-right: 0;
+}
+
.blockContainerDimmed {
opacity: 0.2;
}
@@ -24,18 +31,17 @@
padding-right: 6px;
padding-top: 6px;
padding-bottom: 6px;
- padding-bottom: 6px;
- margin-right: 0px;
- margin-left: 0px;
+ margin-right: 0;
+ margin-left: 0;
margin-bottom: 5px;
margin-top: 5px;
border-radius: 2px;
}
.selectedInnerGroup {
- padding-top: 0px;
- margin-left: 0px;
- margin-right: 0px;
+ padding-top: 0;
+ margin-left: 0;
+ margin-right: 0;
}
.margin {
@@ -43,10 +49,17 @@
margin-right: 9px;
}
+.marginInnerGroup {
+ margin-left: 0;
+ margin-right: 0;
+ padding-left: 0;
+ padding-right: 0;
+}
+
.padding {
- padding-left: 0px;
- padding-right: 0px;
- padding-top: 0px;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
}
.dashedBorderStyle {
diff --git a/packages/block-editor/src/components/block-list/style.native.scss b/packages/block-editor/src/components/block-list/style.native.scss
index c9cd99579413ac..541a35d42a19a3 100644
--- a/packages/block-editor/src/components/block-list/style.native.scss
+++ b/packages/block-editor/src/components/block-list/style.native.scss
@@ -6,6 +6,9 @@
.list {
flex: 1;
+ padding-left: 0;
+ padding-right: 0;
+ margin: 0;
}
.switch {
From e0103289d410bc4fe3638634ca08704ccc42b564 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Tue, 8 Oct 2019 12:17:07 +0200
Subject: [PATCH 003/183] merge master
---
.../developers/data/data-core-block-editor.md | 26 ++++++++++++++
.../src/components/block-list/block.native.js | 36 +++++++++++--------
.../src/components/block-list/index.native.js | 5 ++-
.../components/block-list/style.native.scss | 4 +++
.../media-placeholder/styles.native.scss | 4 +++
.../src/media-text/media-container.native.js | 1 -
packages/components/src/icon-button/index.js | 2 --
.../rich-text/src/component/index.native.js | 2 +-
8 files changed, 58 insertions(+), 22 deletions(-)
diff --git a/docs/designers-developers/developers/data/data-core-block-editor.md b/docs/designers-developers/developers/data/data-core-block-editor.md
index eb9201165dafd6..1c35a94f646820 100644
--- a/docs/designers-developers/developers/data/data-core-block-editor.md
+++ b/docs/designers-developers/developers/data/data-core-block-editor.md
@@ -303,6 +303,19 @@ _Returns_
- `?string`: First block client ID in the multi-selection set.
+# **getFirstToSelectBlock**
+
+Given a block client ID, returns the next element of the hierarchy from which the block is nested which should be selected onFocus, return the block itself for root level blocks.
+
+_Parameters_
+
+- _state_ `Object`: Editor state.
+- _clientId_ `string`: Block from which to find first to select client ID.
+
+_Returns_
+
+- `string`: First to select client ID
+
# **getGlobalBlockCount**
Returns the total number of blocks, or the total number of blocks with a specific name in a post.
@@ -580,6 +593,19 @@ _Returns_
- `?string`: Block Template Lock
+# **getTree**
+
+Given a block client ID, returns the hierarchy tree of client ID.
+
+_Parameters_
+
+- _state_ `Object`: Editor state.
+- _clientId_ `string`: Block from which tree will be created.
+
+_Returns_
+
+- `Array`: Hierarchy tree of client ID.
+
# **hasInserterItems**
Determines whether there are items to show in the inserter.
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index c6b5b096f2f0cb..735aa4f8718d7e 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -118,7 +118,6 @@ class BlockListBlock extends Component {
showFloatingToolbar,
parentId,
isFirstBlock,
- parentId,
isDashed,
isDimmed,
isGroup,
@@ -156,16 +155,16 @@ class BlockListBlock extends Component {
{ showTitle && this.renderBlockTitle() }
);
}
diff --git a/packages/components/src/icon-button/index.js b/packages/components/src/icon-button/index.js
index c2a4e7f831bc66..8c2e361eb2a371 100644
--- a/packages/components/src/icon-button/index.js
+++ b/packages/components/src/icon-button/index.js
@@ -25,14 +25,12 @@ function IconButton( props, ref ) {
tooltip,
shortcut,
labelPosition,
- fill,
...additionalProps
} = props;
const classes = classnames( 'components-icon-button', className, {
'has-text': children,
} );
const tooltipText = tooltip || label;
- const iconProps = fill ? { fill } : {};
// Should show the tooltip if...
const showTooltip = ! additionalProps.disabled && (
diff --git a/packages/rich-text/src/component/index.native.js b/packages/rich-text/src/component/index.native.js
index 031f7e217455ee..178cac71125585 100644
--- a/packages/rich-text/src/component/index.native.js
+++ b/packages/rich-text/src/component/index.native.js
@@ -822,7 +822,7 @@ export class RichText extends Component {
this.firedAfterTextChanged = false;
}
- const dynamicStyle = useStyle( style, styles.richTextDark );
+ const dynamicStyle = getStylesFromColorScheme( style, styles.richTextDark );
const lockOnFocus = blockIsSelected || isParentSelected ? {} : { pointerEvents: 'none' };
return (
From 09359f6ba26d175942a4449502bc68ba7f84fb4a Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Tue, 8 Oct 2019 13:18:43 +0200
Subject: [PATCH 004/183] adjust style
---
.../src/components/block-list/block.native.js | 14 ++------------
1 file changed, 2 insertions(+), 12 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 735aa4f8718d7e..124beeddc582ae 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -155,19 +155,9 @@ class BlockListBlock extends Component {
{ showTitle && this.renderBlockTitle() }
{ isValid && this.getBlockForType() }
From a424c63f6d5e0f855ac709fcc340c4d342870180 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Tue, 8 Oct 2019 13:45:38 +0200
Subject: [PATCH 005/183] fix after merge
---
.../src/components/block-list/block.native.js | 8 --------
1 file changed, 8 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 124beeddc582ae..c27486dd223268 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -187,7 +187,6 @@ export default compose( [
getSelectedBlock,
getBlockOrder,
getFirstToSelectBlock,
- getSelectedBlock,
} = select( 'core/block-editor' );
const order = getBlockIndex( clientId, rootClientId );
const isSelected = isBlockSelected( clientId );
@@ -213,7 +212,6 @@ export default compose( [
const showFloatingToolbar = isSelected && hasRootInnerBlocks && ! isMediaText && ! isMediaTextParent;
- const parentId = getBlockRootClientId( clientId );
const firstToSelect = getFirstToSelectBlock( clientId );
const selectedBlockClientId = getSelectedBlockClientId();
@@ -228,12 +226,6 @@ export default compose( [
const isGroup = hasRootInnerBlocks;//blockType ==='core/group';
const isGroupType = blockType.name === 'core/group';
- const selectedBlock = getSelectedBlock();
- const parentBlock = getBlock( parentId );
-
- const isMediaText = selectedBlock && selectedBlock.name === 'core/media-text';
- const isMediaTextParent = parentBlock && parentBlock.name === 'core/media-text';
-
return {
icon,
name: name || 'core/missing',
From 2e7204bbafbd88877f30ae6592e210d067dea89f Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Tue, 8 Oct 2019 13:18:43 +0200
Subject: [PATCH 006/183] fix after merge
---
.../src/components/block-list/block.native.js | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index c27486dd223268..8762d0f2619552 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -151,7 +151,14 @@ class BlockListBlock extends Component {
accessible={ ! isSelected }
accessibilityRole={ 'button' }
>
-
+
{ showTitle && this.renderBlockTitle() }
Date: Tue, 8 Oct 2019 09:59:32 +0200
Subject: [PATCH 007/183] playing with borders
---
.../src/components/block-list/block.native.js | 30 ++++++++++++-------
1 file changed, 20 insertions(+), 10 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 8762d0f2619552..414dc820ce85a5 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -151,20 +151,30 @@ class BlockListBlock extends Component {
accessible={ ! isSelected }
accessibilityRole={ 'button' }
>
-
+ isDashed && styles.dashedBorderStyle,
+ { borderColor }
+ ]
+ }>
{ showTitle && this.renderBlockTitle() }
{ isValid && this.getBlockForType() }
From 76340c05491117ff15fdc96985c3c0a553d2d5e3 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Wed, 9 Oct 2019 10:12:02 +0200
Subject: [PATCH 008/183] working full border
---
.../src/components/block-list/block.native.js | 48 +++++++++++--------
.../components/block-list/block.native.scss | 14 +++++-
2 files changed, 39 insertions(+), 23 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 414dc820ce85a5..e8c10994c00cf5 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -151,30 +151,37 @@ class BlockListBlock extends Component {
accessible={ ! isSelected }
accessibilityRole={ 'button' }
>
-
+
{ showTitle && this.renderBlockTitle() }
{ isValid && this.getBlockForType() }
@@ -202,7 +209,6 @@ export default compose( [
getSelectedBlockClientId,
getBlock,
getSelectedBlock,
- getBlockOrder,
getFirstToSelectBlock,
} = select( 'core/block-editor' );
const order = getBlockIndex( clientId, rootClientId );
@@ -239,8 +245,8 @@ export default compose( [
const isInnerBlock = parentId && firstToSelect !== parentId;
const isChildOfSameRootBlook = rootBlockId === getBlockHierarchyRootClientId( selectedBlockClientId );
- const isNestedInnerBlock = ! isDashed && rootBlockId === getBlockRootClientId( firstToSelect );
- const isGroup = hasRootInnerBlocks;//blockType ==='core/group';
+ const isNestedInnerBlock = ! isDashed && selectedBlockClientId === getBlockRootClientId( firstToSelect );
+ const isGroup = hasRootInnerBlocks;
const isGroupType = blockType.name === 'core/group';
return {
diff --git a/packages/block-editor/src/components/block-list/block.native.scss b/packages/block-editor/src/components/block-list/block.native.scss
index 168749a7afee1c..c18128b4659d09 100644
--- a/packages/block-editor/src/components/block-list/block.native.scss
+++ b/packages/block-editor/src/components/block-list/block.native.scss
@@ -39,11 +39,21 @@
}
.selectedInnerGroup {
- padding-top: 0;
+ margin-left: 16px;
+ margin-right: 16px;
+}
+
+.noMargin {
+ // padding-top: 0;
margin-left: 0;
margin-right: 0;
}
+.noGroupPadding {
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
.margin {
margin-left: 9px;
margin-right: 9px;
@@ -59,7 +69,7 @@
.padding {
padding-left: 0;
padding-right: 0;
- padding-top: 0;
+ // padding-top: 0;
}
.dashedBorderStyle {
From 3295957ee7b114a11f5354454b2316a80724259d Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Thu, 10 Oct 2019 09:27:49 +0200
Subject: [PATCH 009/183] refactor v1
---
.../src/components/block-list/block.native.js | 26 ++++++++-----------
.../components/block-list/block.native.scss | 19 ++++----------
2 files changed, 16 insertions(+), 29 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index e8c10994c00cf5..4a4384b9ecc1e6 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -154,9 +154,9 @@ class BlockListBlock extends Component {
@@ -166,22 +166,18 @@ class BlockListBlock extends Component {
style={ [
! isSelected && ( isDashed ? styles.blockHolderDashedBordered : styles.blockContainer ),
! isSelected && isDashed && isNestedInnerBlock && styles.blockContainerInner,
- ! isSelected && ! isDashed && isNestedInnerBlock && styles.noMargin,
- ! isSelected && isGroup && ! parentId && styles.selectedInnerGroup,
- ! isSelected && isInnerBlock && ! isChildOfSameRootBlook && ! isDashed && styles.marginInnerGroup,
+ ! isSelected && ! isDashed && isNestedInnerBlock && styles.horizontalMarginNone,
+ ! isSelected && isInnerBlock && ! isChildOfSameRootBlook && ! isDashed && styles.blockContainerInner,
! isSelected && isNestedInnerBlock && ! isDimmed && styles.blockContainerInner,
- ! isSelected && isNestedInnerBlock && { paddingLeft: 0 },
- ! isSelected && isGroup && ! parentId && styles.noMargin,
- ! isSelected && isGroupType && isChildOfSameRootBlook && styles.noMargin,
- isDimmed && isInnerBlock && styles.selectedInnerGroup,
+ ! isSelected && isGroup && ! parentId && styles.horizontalMarginNone,
+ ! isSelected && isGroupType && isChildOfSameRootBlook && styles.horizontalMarginNone,
+ isDimmed && isInnerBlock && styles.marginSelectedInnerBlock,
isDimmed && styles.blockContainerDimmed,
isSelected && ( parentId ? styles.innerBlockContainerFocused : styles.blockContainerFocused ),
- isSelected && isGroup && ! parentId && styles.padding,
- isSelected && isNestedInnerBlock && styles.marginInnerGroup,
- isSelected && isGroupType && styles.marginInnerGroup,
- isGroupType && styles.noGroupPadding,
- isGroupType && isDashed && { paddingTop: 0, paddingBottom: 0 },
- isGroupType && isNestedInnerBlock && styles.noMargin,
+ isSelected && isGroup && ! parentId && styles.horizontalPaddingNone,
+ isSelected && ( isNestedInnerBlock || isGroupType ) && styles.blockContainerInner,
+ ( isGroupType || ( isGroupType && isDashed ) ) && styles.verticalPaddingNone,
+ isGroupType && isNestedInnerBlock && styles.horizontalMarginNone,
] }
>
{ isValid && this.getBlockForType() }
diff --git a/packages/block-editor/src/components/block-list/block.native.scss b/packages/block-editor/src/components/block-list/block.native.scss
index c18128b4659d09..8229535fa9e127 100644
--- a/packages/block-editor/src/components/block-list/block.native.scss
+++ b/packages/block-editor/src/components/block-list/block.native.scss
@@ -38,38 +38,29 @@
border-radius: 2px;
}
-.selectedInnerGroup {
+.marginSelectedInnerBlock {
margin-left: 16px;
margin-right: 16px;
}
-.noMargin {
- // padding-top: 0;
+.horizontalMarginNone {
margin-left: 0;
margin-right: 0;
}
-.noGroupPadding {
+.verticalPaddingNone {
padding-top: 0;
padding-bottom: 0;
}
-.margin {
+.outlineBorderMargin {
margin-left: 9px;
margin-right: 9px;
}
-.marginInnerGroup {
- margin-left: 0;
- margin-right: 0;
- padding-left: 0;
- padding-right: 0;
-}
-
-.padding {
+.horizontalPaddingNone {
padding-left: 0;
padding-right: 0;
- // padding-top: 0;
}
.dashedBorderStyle {
From a28b17d302a9ebbbfc46ccb239b776d8177a7e89 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Thu, 10 Oct 2019 10:20:52 +0200
Subject: [PATCH 010/183] refactor v2
---
.../src/components/block-list/block.native.js | 15 +++------------
1 file changed, 3 insertions(+), 12 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 4a4384b9ecc1e6..661e864a319b43 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -120,7 +120,6 @@ class BlockListBlock extends Component {
isFirstBlock,
isDashed,
isDimmed,
- isGroup,
isInnerBlock,
isChildOfSameRootBlook,
isNestedInnerBlock,
@@ -165,19 +164,13 @@ class BlockListBlock extends Component {
accessibilityLabel={ accessibilityLabel }
style={ [
! isSelected && ( isDashed ? styles.blockHolderDashedBordered : styles.blockContainer ),
- ! isSelected && isDashed && isNestedInnerBlock && styles.blockContainerInner,
- ! isSelected && ! isDashed && isNestedInnerBlock && styles.horizontalMarginNone,
- ! isSelected && isInnerBlock && ! isChildOfSameRootBlook && ! isDashed && styles.blockContainerInner,
- ! isSelected && isNestedInnerBlock && ! isDimmed && styles.blockContainerInner,
- ! isSelected && isGroup && ! parentId && styles.horizontalMarginNone,
- ! isSelected && isGroupType && isChildOfSameRootBlook && styles.horizontalMarginNone,
+ ! isSelected && ( ( isDashed || ! isDimmed ) && isNestedInnerBlock ) || ( isInnerBlock && ! isChildOfSameRootBlook && ! isDashed ) && styles.blockContainerInner,
+ ! isSelected && ( isGroupType && ( ! parentId || isChildOfSameRootBlook ) || isNestedInnerBlock ) && styles.horizontalMarginNone,
isDimmed && isInnerBlock && styles.marginSelectedInnerBlock,
isDimmed && styles.blockContainerDimmed,
- isSelected && ( parentId ? styles.innerBlockContainerFocused : styles.blockContainerFocused ),
- isSelected && isGroup && ! parentId && styles.horizontalPaddingNone,
+ isSelected && ( isInnerBlock ? styles.innerBlockContainerFocused : styles.blockContainerFocused ),
isSelected && ( isNestedInnerBlock || isGroupType ) && styles.blockContainerInner,
( isGroupType || ( isGroupType && isDashed ) ) && styles.verticalPaddingNone,
- isGroupType && isNestedInnerBlock && styles.horizontalMarginNone,
] }
>
{ isValid && this.getBlockForType() }
@@ -242,7 +235,6 @@ export default compose( [
const isInnerBlock = parentId && firstToSelect !== parentId;
const isChildOfSameRootBlook = rootBlockId === getBlockHierarchyRootClientId( selectedBlockClientId );
const isNestedInnerBlock = ! isDashed && selectedBlockClientId === getBlockRootClientId( firstToSelect );
- const isGroup = hasRootInnerBlocks;
const isGroupType = blockType.name === 'core/group';
return {
@@ -262,7 +254,6 @@ export default compose( [
isDashed,
isDimmed,
firstToSelect,
- isGroup,
isInnerBlock,
isChildOfSameRootBlook,
isNestedInnerBlock,
From 5326d44eb8d828ce93520d6bb7de5b284ee3ee71 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Thu, 10 Oct 2019 10:46:11 +0200
Subject: [PATCH 011/183] fixed dashed border android
---
.../src/components/block-list/block.native.scss | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.scss b/packages/block-editor/src/components/block-list/block.native.scss
index 8229535fa9e127..561ffd94cee075 100644
--- a/packages/block-editor/src/components/block-list/block.native.scss
+++ b/packages/block-editor/src/components/block-list/block.native.scss
@@ -21,10 +21,8 @@
}
.blockHolderDashedBordered {
- border-top-width: 1px;
- border-bottom-width: 1px;
- border-left-width: 1px;
- border-right-width: 1px;
+ border-width: 1px;
+ border-radius: 2px;
border-style: dashed;
border-color: $gray;
padding-left: 6px;
@@ -35,7 +33,6 @@
margin-left: 0;
margin-bottom: 5px;
margin-top: 5px;
- border-radius: 2px;
}
.marginSelectedInnerBlock {
From c70697c7f8d571aab995a187d369875a739db971 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Thu, 10 Oct 2019 12:18:43 +0200
Subject: [PATCH 012/183] refactor v3
---
.../src/components/block-list/block.native.js | 4 ++--
.../src/components/block-list/block.native.scss | 17 +++++++----------
2 files changed, 9 insertions(+), 12 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 661e864a319b43..c9784411e0c763 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -154,7 +154,7 @@ class BlockListBlock extends Component {
styles.blockHolder,
borderStyle,
isSelected && ( isGroupType || isInnerBlock || isNestedInnerBlock ) && styles.outlineBorderMargin,
- isDashed && styles.dashedBorderStyle,
+ isDashed && styles.dashedBorderMargin,
isGroupType && styles.verticalPaddingNone,
{ borderColor },
]
@@ -170,7 +170,7 @@ class BlockListBlock extends Component {
isDimmed && styles.blockContainerDimmed,
isSelected && ( isInnerBlock ? styles.innerBlockContainerFocused : styles.blockContainerFocused ),
isSelected && ( isNestedInnerBlock || isGroupType ) && styles.blockContainerInner,
- ( isGroupType || ( isGroupType && isDashed ) ) && styles.verticalPaddingNone,
+ isGroupType && styles.verticalPaddingNone,
] }
>
{ isValid && this.getBlockForType() }
diff --git a/packages/block-editor/src/components/block-list/block.native.scss b/packages/block-editor/src/components/block-list/block.native.scss
index 561ffd94cee075..5e076e49e9c09e 100644
--- a/packages/block-editor/src/components/block-list/block.native.scss
+++ b/packages/block-editor/src/components/block-list/block.native.scss
@@ -25,10 +25,7 @@
border-radius: 2px;
border-style: dashed;
border-color: $gray;
- padding-left: 6px;
- padding-right: 6px;
- padding-top: 6px;
- padding-bottom: 6px;
+ padding: 6px;
margin-right: 0;
margin-left: 0;
margin-bottom: 5px;
@@ -50,17 +47,17 @@
padding-bottom: 0;
}
-.outlineBorderMargin {
- margin-left: 9px;
- margin-right: 9px;
-}
-
.horizontalPaddingNone {
padding-left: 0;
padding-right: 0;
}
-.dashedBorderStyle {
+.outlineBorderMargin {
+ margin-left: 9px;
+ margin-right: 9px;
+}
+
+.dashedBorderMargin {
margin-left: 5px;
margin-right: 5px;
}
From eb7bed064b6690d3df033f5f7ce2d5b3f21491bc Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Thu, 10 Oct 2019 12:45:54 +0200
Subject: [PATCH 013/183] adjust button-block-appender margin
---
.../src/components/button-block-appender/styles.native.scss | 2 ++
1 file changed, 2 insertions(+)
diff --git a/packages/block-editor/src/components/button-block-appender/styles.native.scss b/packages/block-editor/src/components/button-block-appender/styles.native.scss
index 3a6549980af87d..46b4a055cd5bd4 100644
--- a/packages/block-editor/src/components/button-block-appender/styles.native.scss
+++ b/packages/block-editor/src/components/button-block-appender/styles.native.scss
@@ -2,6 +2,8 @@
align-items: center;
justify-content: center;
padding: 12px;
+ margin-left: 2px;
+ margin-right: 2px;
background-color: $white;
border: $border-width solid $light-gray-500;
border-radius: 4px;
From 2fdedb7078a7272d7421ae32f382896aa683f565 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Thu, 10 Oct 2019 13:07:07 +0200
Subject: [PATCH 014/183] refactor v4
---
.../block-editor/src/components/block-list/block.native.js | 1 -
.../block-editor/src/components/block-list/block.native.scss | 5 -----
2 files changed, 6 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index c9784411e0c763..9ab56f4e836db2 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -166,7 +166,6 @@ class BlockListBlock extends Component {
! isSelected && ( isDashed ? styles.blockHolderDashedBordered : styles.blockContainer ),
! isSelected && ( ( isDashed || ! isDimmed ) && isNestedInnerBlock ) || ( isInnerBlock && ! isChildOfSameRootBlook && ! isDashed ) && styles.blockContainerInner,
! isSelected && ( isGroupType && ( ! parentId || isChildOfSameRootBlook ) || isNestedInnerBlock ) && styles.horizontalMarginNone,
- isDimmed && isInnerBlock && styles.marginSelectedInnerBlock,
isDimmed && styles.blockContainerDimmed,
isSelected && ( isInnerBlock ? styles.innerBlockContainerFocused : styles.blockContainerFocused ),
isSelected && ( isNestedInnerBlock || isGroupType ) && styles.blockContainerInner,
diff --git a/packages/block-editor/src/components/block-list/block.native.scss b/packages/block-editor/src/components/block-list/block.native.scss
index 5e076e49e9c09e..e2b261faa828c8 100644
--- a/packages/block-editor/src/components/block-list/block.native.scss
+++ b/packages/block-editor/src/components/block-list/block.native.scss
@@ -32,11 +32,6 @@
margin-top: 5px;
}
-.marginSelectedInnerBlock {
- margin-left: 16px;
- margin-right: 16px;
-}
-
.horizontalMarginNone {
margin-left: 0;
margin-right: 0;
From d602fff8d6cd12821489fd42736613224b9e052c Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Thu, 10 Oct 2019 15:01:02 +0200
Subject: [PATCH 015/183] reefactor v5
---
.../src/components/block-list/block.native.js | 46 ++++++++++++++++---
1 file changed, 40 insertions(+), 6 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 9ab56f4e836db2..ce0f6fb62ca39e 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -121,7 +121,6 @@ class BlockListBlock extends Component {
isDashed,
isDimmed,
isInnerBlock,
- isChildOfSameRootBlook,
isNestedInnerBlock,
isGroupType,
} = this.props;
@@ -163,12 +162,9 @@ class BlockListBlock extends Component {
@@ -185,6 +181,44 @@ class BlockListBlock extends Component {
}
}
+function applySelectedStyle( { isInnerBlock, isNestedInnerBlock, isGroupType } ) {
+ let selectedStyle = [ isInnerBlock ? styles.innerBlockContainerFocused : styles.blockContainerFocused ];
+
+ if ( isNestedInnerBlock || isGroupType ) {
+ selectedStyle = [ ...selectedStyle, styles.blockContainerInner ];
+ }
+
+ return selectedStyle;
+}
+
+function applyUnSelectedStyle( { isDashed, isDimmed, isNestedInnerBlock, isInnerBlock, isChildOfSameRootBlook, isGroupType, parentId } ) {
+ let unSelectedStyle = [ styles.blockContainer ];
+
+ if ( isNestedInnerBlock ) {
+ if ( ! isDimmed ) {
+ unSelectedStyle = [ ...unSelectedStyle, styles.blockContainerInner ];
+ }
+ unSelectedStyle = [ ...unSelectedStyle, styles.horizontalMarginNone ];
+ }
+
+ if ( isDashed ) {
+ unSelectedStyle = [ ...unSelectedStyle, styles.blockHolderDashedBordered ];
+ if ( isNestedInnerBlock ) {
+ unSelectedStyle = [ ...unSelectedStyle, styles.blockContainerInner ];
+ }
+ } else if ( isInnerBlock && ! isChildOfSameRootBlook ) {
+ unSelectedStyle = [ ...unSelectedStyle, styles.blockContainerInner ];
+ }
+
+ if ( isGroupType ) {
+ if ( ! parentId || isChildOfSameRootBlook ) {
+ unSelectedStyle = [ ...unSelectedStyle, styles.horizontalMarginNone ];
+ }
+ }
+
+ return unSelectedStyle;
+}
+
export default compose( [
withSelect( ( select, { clientId, rootClientId } ) => {
const {
From 497dcbc8a66d82441d6b2d16c42803912ab6ed07 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Thu, 10 Oct 2019 23:03:35 +0200
Subject: [PATCH 016/183] refactor v6
---
.../src/components/block-list/block.native.js | 99 +++++++++++--------
.../components/block-list/block.native.scss | 24 ++++-
2 files changed, 79 insertions(+), 44 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index ce0f6fb62ca39e..43b914f604b5c7 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -105,6 +105,61 @@ class BlockListBlock extends Component {
return blockName;
}
+ applySelectedStyle() {
+ const {
+ isInnerBlock,
+ isNestedInnerBlock,
+ isGroupType,
+ } = this.props;
+
+ if ( isNestedInnerBlock || isGroupType ) {
+ return styles.nestedFocusedBlock;
+ }
+
+ if ( isInnerBlock ) {
+ return styles.innerBlockContainerFocused;
+ }
+ return styles.blockContainerFocused;
+ }
+
+ applyUnSelectedStyle() {
+ const {
+ isDashed,
+ isDimmed,
+ isNestedInnerBlock,
+ isInnerBlock,
+ isChildOfSameRootBlook,
+ isGroupType,
+ parentId,
+ } = this.props;
+
+ if ( ! isDashed && isInnerBlock && ! isChildOfSameRootBlook ) {
+ return styles.blockContainerInner;
+ }
+
+ const dashedStyle = [ styles.blockHolderDashedBordered ];
+ let defaultStyle = [ styles.blockContainer ];
+
+ if ( isDashed ) {
+ defaultStyle = dashedStyle;
+ }
+
+ if ( isNestedInnerBlock ) {
+ if ( ! isDimmed || isDashed ) {
+ return [ ...defaultStyle, styles.blockContainerInner ];
+ }
+ return [ ...defaultStyle, styles.nestedBlockContainerInner ];
+ }
+
+ if ( isGroupType ) {
+ if ( ! parentId || isChildOfSameRootBlook ) {
+ return [ ...defaultStyle, styles.horizontalMarginNone ];
+ }
+ }
+
+ return defaultStyle;
+ }
+
render() {
const {
borderStyle,
@@ -162,8 +217,8 @@ class BlockListBlock extends Component {
{
const {
@@ -227,9 +244,9 @@ export default compose( [
isBlockSelected,
__unstableGetBlockWithoutInnerBlocks,
getBlockHierarchyRootClientId,
- getBlockRootClientId,
getSelectedBlockClientId,
getBlock,
+ getBlockRootClientId,
getSelectedBlock,
getFirstToSelectBlock,
} = select( 'core/block-editor' );
diff --git a/packages/block-editor/src/components/block-list/block.native.scss b/packages/block-editor/src/components/block-list/block.native.scss
index e2b261faa828c8..b62e82effcb92f 100644
--- a/packages/block-editor/src/components/block-list/block.native.scss
+++ b/packages/block-editor/src/components/block-list/block.native.scss
@@ -14,6 +14,15 @@
margin-right: 0;
padding-left: 0;
padding-right: 0;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+
+.nestedBlockContainerInner {
+ margin-left: 0;
+ margin-right: 0;
+ padding-top: 9px;
+ padding-bottom: 9px;
}
.blockContainerDimmed {
@@ -25,11 +34,11 @@
border-radius: 2px;
border-style: dashed;
border-color: $gray;
- padding: 6px;
+ padding: 5px;
margin-right: 0;
margin-left: 0;
- margin-bottom: 5px;
- margin-top: 5px;
+ margin-bottom: 6px;
+ margin-top: 6px;
}
.horizontalMarginNone {
@@ -57,6 +66,15 @@
margin-right: 5px;
}
+.nestedFocusedBlock {
+ margin-left: 0;
+ margin-right: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 12px;
+ padding-bottom: 0; // will be flushed into inline toolbar height
+}
+
.innerBlockContainerFocused {
padding-left: 12px;
padding-right: 12px;
From ca22502fb4a6012ef1bf35e51ee94cdb50a67eff Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Fri, 11 Oct 2019 07:14:05 +0200
Subject: [PATCH 017/183] adjust for media text
---
packages/block-editor/src/components/block-list/block.native.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 43b914f604b5c7..67d5e38a86fa22 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -279,7 +279,7 @@ export default compose( [
const selectedBlockClientId = getSelectedBlockClientId();
const isRootSiblingsSelected = getBlockRootClientId( selectedBlockClientId ) === '';
- const isDashed = selectedBlockClientId === parentId;
+ const isDashed = selectedBlockClientId === parentId && ! isMediaTextParent;
const isDimmed = ! isSelected && ! isRootSiblingsSelected && !! selectedBlockClientId && firstToSelect === clientId && ! isDashed;
const isInnerBlock = parentId && firstToSelect !== parentId;
From dd06cbae30ee9bca2801994f8b8f0efe3372492a Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Fri, 11 Oct 2019 07:46:09 +0200
Subject: [PATCH 018/183] adjust focus for media text
---
.../src/components/block-list/block.native.js | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 67d5e38a86fa22..1baf6361ebd49f 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -40,9 +40,11 @@ class BlockListBlock extends Component {
}
onFocus() {
- const { firstToSelect, isSelected, onSelect } = this.props;
+ const { firstToSelect, isSelected, onSelect, isParentSelected, isMediaText } = this.props;
if ( ! isSelected ) {
- onSelect( firstToSelect );
+ if ( ! isMediaText || ! isParentSelected ) {
+ onSelect( firstToSelect );
+ }
}
}
@@ -286,6 +288,7 @@ export default compose( [
const isChildOfSameRootBlook = rootBlockId === getBlockHierarchyRootClientId( selectedBlockClientId );
const isNestedInnerBlock = ! isDashed && selectedBlockClientId === getBlockRootClientId( firstToSelect );
const isGroupType = blockType.name === 'core/group';
+ const isParentSelected = parentId === selectedBlockClientId;
return {
icon,
@@ -308,6 +311,8 @@ export default compose( [
isChildOfSameRootBlook,
isNestedInnerBlock,
isGroupType,
+ isParentSelected,
+ isMediaText,
};
} ),
withDispatch( ( dispatch, ownProps, { select } ) => {
From ec9781558cd4dc8bca325aecff933ce55ac690c1 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Fri, 11 Oct 2019 08:01:53 +0200
Subject: [PATCH 019/183] refactor apply styles
---
.../src/components/block-list/block.native.js | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 1baf6361ebd49f..cd0896a9516fae 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -121,6 +121,7 @@ class BlockListBlock extends Component {
if ( isInnerBlock ) {
return styles.innerBlockContainerFocused;
}
+
return styles.blockContainerFocused;
}
@@ -139,12 +140,7 @@ class BlockListBlock extends Component {
return styles.blockContainerInner;
}
- const dashedStyle = [ styles.blockHolderDashedBordered ];
- let defaultStyle = [ styles.blockContainer ];
-
- if ( isDashed ) {
- defaultStyle = dashedStyle;
- }
+ const defaultStyle = [ isDashed ? styles.blockHolderDashedBordered : styles.blockContainer ];
if ( isNestedInnerBlock ) {
if ( ! isDimmed || isDashed ) {
@@ -153,10 +149,8 @@ class BlockListBlock extends Component {
return [ ...defaultStyle, styles.nestedBlockContainerInner ];
}
- if ( isGroupType ) {
- if ( ! parentId || isChildOfSameRootBlook ) {
- return [ ...defaultStyle, styles.horizontalMarginNone ];
- }
+ if ( isGroupType && ( ! parentId || isChildOfSameRootBlook ) ) {
+ return [ ...defaultStyle, styles.horizontalMarginNone ];
}
return defaultStyle;
From 8b02aae5f8a799e640b28ea087ae13531c3b6fb3 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Fri, 11 Oct 2019 08:26:31 +0200
Subject: [PATCH 020/183] adjust media text media container
---
packages/block-library/src/media-text/media-container.native.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/packages/block-library/src/media-text/media-container.native.js b/packages/block-library/src/media-text/media-container.native.js
index a647247c09bdc6..55417a29d10fd1 100644
--- a/packages/block-library/src/media-text/media-container.native.js
+++ b/packages/block-library/src/media-text/media-container.native.js
@@ -262,6 +262,7 @@ class MediaContainer extends Component {
allowedTypes={ ALLOWED_MEDIA_TYPES }
onFocus={ this.props.onFocus }
onError={ this.onUploadError }
+ isBlockSelected={ this.props.isSelected }
/>
);
}
From 4c1e1b9fb36715e8d4d594972841c3f9c195e7f3 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Fri, 11 Oct 2019 08:48:08 +0200
Subject: [PATCH 021/183] pass isParentSelected prop to BlockEdit
---
packages/block-editor/src/components/block-list/block.native.js | 1 +
packages/block-library/src/paragraph/edit.native.js | 1 +
2 files changed, 2 insertions(+)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index cd0896a9516fae..484d76be16131c 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -62,6 +62,7 @@ class BlockListBlock extends Component {
onReplace( [] ) : undefined }
placeholder={ placeholder || __( 'Start writing…' ) }
+ isParentSelected={ this.props.isParentSelected }
/>
);
From e5976c036a148ca5ab2e0dbb4bed661d55cd4ddc Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Fri, 11 Oct 2019 09:47:54 +0200
Subject: [PATCH 022/183] adjust dim style
---
.../src/components/block-list/style.native.scss | 4 ----
.../editor/src/components/post-title/index.native.js | 10 +++++-----
2 files changed, 5 insertions(+), 9 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/style.native.scss b/packages/block-editor/src/components/block-list/style.native.scss
index e66e8cf5a5ba7c..541a35d42a19a3 100644
--- a/packages/block-editor/src/components/block-list/style.native.scss
+++ b/packages/block-editor/src/components/block-list/style.native.scss
@@ -79,10 +79,6 @@
border-color: $gray-70;
}
-.blockHolderFocusedDark {
- border-color: $gray-70;
-}
-
.blockListFooter {
height: 80px;
}
diff --git a/packages/editor/src/components/post-title/index.native.js b/packages/editor/src/components/post-title/index.native.js
index 6b36b0c2fe7fce..6b8192a4babcbc 100644
--- a/packages/editor/src/components/post-title/index.native.js
+++ b/packages/editor/src/components/post-title/index.native.js
@@ -105,15 +105,15 @@ export default compose(
isPostTitleSelected,
} = select( 'core/editor' );
- const { getSelectedBlockClientId, getBlockHierarchyRootClientId, getBlock } = select( 'core/block-editor' );
+ const { getSelectedBlockClientId, getBlockRootClientId, getFirstToSelectBlock } = select( 'core/block-editor' );
const clientId = getSelectedBlockClientId();
const isAnyBlockSelected = !! clientId;
- const rootBlockId = getBlockHierarchyRootClientId( clientId );
- const rootBlock = getBlock( rootBlockId );
- const hasRootInnerBlocks = rootBlock && rootBlock.innerBlocks.length !== 0;
+ const parentId = getBlockRootClientId( clientId );
+ const firstToSelect = getFirstToSelectBlock( clientId );
+ const isInnerBlock = parentId && firstToSelect !== parentId;
- const isDimmed = isAnyBlockSelected && hasRootInnerBlocks;
+ const isDimmed = isAnyBlockSelected && isInnerBlock;
return {
isAnyBlockSelected,
From b54fa568e76f243c53aab06a05e05359fb6006c7 Mon Sep 17 00:00:00 2001
From: lukewalczak
Date: Tue, 15 Oct 2019 15:21:26 +0200
Subject: [PATCH 023/183] Move FloatingToolbar logic to get shippable temporary
version
---
.../block-mobile-floating-toolbar.native.js | 30 ++++---------------
.../block-mobile-floating-toolbar.native.scss | 6 ++--
.../src/components/block-list/block.native.js | 4 ---
.../src/components/block-list/index.native.js | 18 ++---------
4 files changed, 10 insertions(+), 48 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block-mobile-floating-toolbar.native.js b/packages/block-editor/src/components/block-list/block-mobile-floating-toolbar.native.js
index cdd54ffdcaca1b..0171af7db9a8cc 100644
--- a/packages/block-editor/src/components/block-list/block-mobile-floating-toolbar.native.js
+++ b/packages/block-editor/src/components/block-list/block-mobile-floating-toolbar.native.js
@@ -7,34 +7,16 @@ import { View, TouchableWithoutFeedback } from 'react-native';
* Internal dependencies
*/
import styles from './block-mobile-floating-toolbar.scss';
-/**
- * WordPress dependencies
- */
-import { createSlotFill } from '@wordpress/components';
-
-const { Fill, Slot } = createSlotFill( 'FloatingToolbar' );
function FloatingToolbar( { children } ) {
return (
-
- { ( { innerFloatingToolbar } ) => {
- return (
-
- { children }
-
-
- );
- } }
-
-
+
+ { children }
+
+
);
}
-FloatingToolbar.Slot = Slot;
-
export default FloatingToolbar;
diff --git a/packages/block-editor/src/components/block-list/block-mobile-floating-toolbar.native.scss b/packages/block-editor/src/components/block-list/block-mobile-floating-toolbar.native.scss
index 713633516fca23..ad71fd5bae08d3 100644
--- a/packages/block-editor/src/components/block-list/block-mobile-floating-toolbar.native.scss
+++ b/packages/block-editor/src/components/block-list/block-mobile-floating-toolbar.native.scss
@@ -1,15 +1,13 @@
-.floatingToolbarFill {
+.floatingToolbar {
background-color: $dark-gray-500;
margin: auto;
min-width: 100;
max-height: $floating-toolbar-height;
border-radius: 22px;
- flex-direction: row;
z-index: 100;
- top: -$floating-toolbar-height;
height: $floating-toolbar-height;
- position: absolute;
align-items: center;
justify-content: center;
align-self: center;
+ margin-bottom: 8px;
}
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 484d76be16131c..42202bc4a44f4e 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -169,7 +169,6 @@ class BlockListBlock extends Component {
title,
showFloatingToolbar,
parentId,
- isFirstBlock,
isDashed,
isDimmed,
isInnerBlock,
@@ -183,7 +182,6 @@ class BlockListBlock extends Component {
return (
<>
- { showFloatingToolbar && ( ! isFirstBlock || parentId === '' ) && }
{ showFloatingToolbar &&
(
@@ -249,7 +247,6 @@ export default compose( [
} = select( 'core/block-editor' );
const order = getBlockIndex( clientId, rootClientId );
const isSelected = isBlockSelected( clientId );
- const isFirstBlock = order === 0;
const isLastBlock = order === getBlocks().length - 1;
const block = __unstableGetBlockWithoutInnerBlocks( clientId );
const { name, attributes, isValid } = block || {};
@@ -292,7 +289,6 @@ export default compose( [
title,
attributes,
blockType,
- isFirstBlock,
isLastBlock,
isSelected,
isValid,
diff --git a/packages/block-editor/src/components/block-list/index.native.js b/packages/block-editor/src/components/block-list/index.native.js
index b8d784cf82267a..a804b2d223e9bc 100644
--- a/packages/block-editor/src/components/block-list/index.native.js
+++ b/packages/block-editor/src/components/block-list/index.native.js
@@ -20,7 +20,6 @@ import { KeyboardAwareFlatList, ReadableContentView } from '@wordpress/component
import styles from './style.scss';
import BlockListBlock from './block';
import BlockListAppender from '../block-list-appender';
-import FloatingToolbar from './block-mobile-floating-toolbar';
const innerToolbarHeight = 44;
@@ -43,7 +42,7 @@ export class BlockList extends Component {
}
blockHolderBorderStyle() {
- return this.props.isFullyBordered || this.props.hasFullBorder ? styles.blockHolderFullBordered : styles.blockHolderSemiBordered;
+ return this.props.isFullyBordered ? styles.blockHolderFullBordered : styles.blockHolderSemiBordered;
}
onCaretVerticalPositionChange( targetId, caretY, previousCaretY ) {
@@ -70,15 +69,13 @@ export class BlockList extends Component {
}
render() {
- const { clearSelectedBlock, blockClientIds, isFullyBordered, title, header, withFooter = true, renderAppender, isFirstBlock, selectedBlockParentId } = this.props;
+ const { clearSelectedBlock, blockClientIds, isFullyBordered, title, header, withFooter = true, renderAppender } = this.props;
- const showFloatingToolbar = isFirstBlock && selectedBlockParentId !== '';
return (
- { showFloatingToolbar && }
{
const shouldHideBlockAtIndex = (
! isSelectedGroup && blockInsertionPointIsVisible &&
@@ -206,8 +198,6 @@ export default compose( [
return ! shouldHideBlockAtIndex;
};
- const hasFullBorder = !! getBlockRootClientId( selectedBlockClientId ) || isSelectedGroup;
-
return {
blockClientIds,
blockCount: getBlockCount( rootClientId ),
@@ -215,10 +205,6 @@ export default compose( [
shouldShowBlockAtIndex,
shouldShowInsertionPoint,
selectedBlockClientId,
- isFirstBlock,
- rootClientId,
- selectedBlockParentId,
- hasFullBorder,
};
} ),
withDispatch( ( dispatch ) => {
From a6dcf700b4b1a90f6083a288752ddbd3fe0e672e Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Wed, 16 Oct 2019 09:33:32 +0200
Subject: [PATCH 024/183] fix after merge floating-toolbr
---
.../block-editor/src/components/block-list/index.native.js | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/packages/block-editor/src/components/block-list/index.native.js b/packages/block-editor/src/components/block-list/index.native.js
index a804b2d223e9bc..c5f6ed0c163d09 100644
--- a/packages/block-editor/src/components/block-list/index.native.js
+++ b/packages/block-editor/src/components/block-list/index.native.js
@@ -42,7 +42,7 @@ export class BlockList extends Component {
}
blockHolderBorderStyle() {
- return this.props.isFullyBordered ? styles.blockHolderFullBordered : styles.blockHolderSemiBordered;
+ return this.props.isFullyBordered || this.props.hasFullBorder ? styles.blockHolderFullBordered : styles.blockHolderSemiBordered;
}
onCaretVerticalPositionChange( targetId, caretY, previousCaretY ) {
@@ -169,6 +169,7 @@ export default compose( [
getBlockInsertionPoint,
isBlockInsertionPointVisible,
getSelectedBlock,
+ getBlockRootClientId,
} = select( 'core/block-editor' );
const selectedBlockClientId = getSelectedBlockClientId();
@@ -198,6 +199,8 @@ export default compose( [
return ! shouldHideBlockAtIndex;
};
+ const hasFullBorder = !! getBlockRootClientId( selectedBlockClientId ) || isSelectedGroup;
+
return {
blockClientIds,
blockCount: getBlockCount( rootClientId ),
@@ -205,6 +208,7 @@ export default compose( [
shouldShowBlockAtIndex,
shouldShowInsertionPoint,
selectedBlockClientId,
+ hasFullBorder,
};
} ),
withDispatch( ( dispatch ) => {
From 63b163f5fd6beebca2af4cc72fca86adf343142f Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Tue, 15 Oct 2019 14:01:59 +0200
Subject: [PATCH 025/183] style media-text and fix jumping behaviour
---
.../src/components/block-list/block.native.js | 32 +++++++++++--------
.../components/block-list/block.native.scss | 11 +++++++
.../src/components/block-list/index.native.js | 2 +-
.../block-library/src/heading/edit.native.js | 2 ++
.../src/media-text/edit.native.js | 20 +++++++++---
.../src/media-text/media-container.js | 3 +-
.../src/paragraph/edit.native.js | 2 +-
.../rich-text/src/component/index.native.js | 10 ++++--
8 files changed, 59 insertions(+), 23 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 42202bc4a44f4e..cd8f5af9cc6451 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -40,11 +40,9 @@ class BlockListBlock extends Component {
}
onFocus() {
- const { firstToSelect, isSelected, onSelect, isParentSelected, isMediaText } = this.props;
+ const { firstToSelectId, isSelected, onSelect } = this.props;
if ( ! isSelected ) {
- if ( ! isMediaText || ! isParentSelected ) {
- onSelect( firstToSelect );
- }
+ onSelect( firstToSelectId );
}
}
@@ -71,6 +69,7 @@ class BlockListBlock extends Component {
mergeBlocks={ this.props.mergeBlocks }
onCaretVerticalPositionChange={ this.props.onCaretVerticalPositionChange }
clientId={ this.props.clientId }
+ isInnerBlock={ this.props.isInnerBlock }
/>
);
}
@@ -135,6 +134,7 @@ class BlockListBlock extends Component {
isChildOfSameRootBlook,
isGroupType,
parentId,
+ isMediaTextParent,
} = this.props;
if ( ! isDashed && isInnerBlock && ! isChildOfSameRootBlook ) {
@@ -143,6 +143,10 @@ class BlockListBlock extends Component {
const defaultStyle = [ isDashed ? styles.blockHolderDashedBordered : styles.blockContainer ];
+ if ( isMediaTextParent ) {
+ return [ ...defaultStyle, styles.blockContainerMediaTextInner ];
+ }
+
if ( isNestedInnerBlock ) {
if ( ! isDimmed || isDashed ) {
return [ ...defaultStyle, styles.blockContainerInner ];
@@ -174,6 +178,7 @@ class BlockListBlock extends Component {
isInnerBlock,
isNestedInnerBlock,
isGroupType,
+ isMediaTextParent,
} = this.props;
const borderColor = isSelected ? focusedBorderColor : 'transparent';
@@ -202,8 +207,8 @@ class BlockListBlock extends Component {
{
return (
blockInsertionPointIsVisible &&
diff --git a/packages/block-library/src/heading/edit.native.js b/packages/block-library/src/heading/edit.native.js
index ac8a0e755278cd..29983197843ac1 100644
--- a/packages/block-library/src/heading/edit.native.js
+++ b/packages/block-library/src/heading/edit.native.js
@@ -23,6 +23,7 @@ const HeadingEdit = ( {
onReplace,
setAttributes,
style,
+ isInnerBlock,
} ) => (
@@ -57,6 +58,7 @@ const HeadingEdit = ( {
onReplace={ onReplace }
onRemove={ () => onReplace( [] ) }
placeholder={ attributes.placeholder || __( 'Write heading…' ) }
+ isInnerBlock={ isInnerBlock }
/>
);
diff --git a/packages/block-library/src/media-text/edit.native.js b/packages/block-library/src/media-text/edit.native.js
index a4b2eaab44628b..672a15456e38bf 100644
--- a/packages/block-library/src/media-text/edit.native.js
+++ b/packages/block-library/src/media-text/edit.native.js
@@ -133,6 +133,7 @@ class MediaTextEdit extends Component {
backgroundColor,
setAttributes,
isMobile,
+ isSelected,
} = this.props;
const {
isStackedOnMobile,
@@ -150,6 +151,7 @@ class MediaTextEdit extends Component {
...( shouldStack ? styles[ 'is-stacked-on-mobile' ] : {} ),
...( shouldStack && mediaPosition === 'right' ? styles[ 'is-stacked-on-mobile.has-media-on-the-right' ] : {} ),
backgroundColor: backgroundColor.color,
+ ...{ padding: isSelected ? 8 : 16 },
};
const innerBlockWidth = shouldStack ? 100 : ( 100 - temporaryMediaWidth );
const innerBlockWidthString = `${ innerBlockWidth }%`;
@@ -187,11 +189,19 @@ class MediaTextEdit extends Component {
{ this.renderMediaArea() }
-
+
+
+
>
diff --git a/packages/block-library/src/media-text/media-container.js b/packages/block-library/src/media-text/media-container.js
index fce35487d6a03b..cb45eb27830047 100644
--- a/packages/block-library/src/media-text/media-container.js
+++ b/packages/block-library/src/media-text/media-container.js
@@ -93,7 +93,7 @@ class MediaContainer extends Component {
}
renderPlaceholder() {
- const { onSelectMedia, className, noticeUI } = this.props;
+ const { onSelectMedia, className, noticeUI, style } = this.props;
return (
}
@@ -106,6 +106,7 @@ class MediaContainer extends Component {
allowedTypes={ ALLOWED_MEDIA_TYPES }
notices={ noticeUI }
onError={ this.onUploadError }
+ style={ style }
/>
);
}
diff --git a/packages/block-library/src/paragraph/edit.native.js b/packages/block-library/src/paragraph/edit.native.js
index 46d21283531a80..ac3862ab5ac1c1 100644
--- a/packages/block-library/src/paragraph/edit.native.js
+++ b/packages/block-library/src/paragraph/edit.native.js
@@ -78,7 +78,7 @@ class ParagraphEdit extends Component {
onReplace={ onReplace }
onRemove={ onReplace ? () => onReplace( [] ) : undefined }
placeholder={ placeholder || __( 'Start writing…' ) }
- isParentSelected={ this.props.isParentSelected }
+ isInnerBlock={ this.props.isInnerBlock }
/>
);
diff --git a/packages/rich-text/src/component/index.native.js b/packages/rich-text/src/component/index.native.js
index 1633b1acad87a5..593d17ab8fc40a 100644
--- a/packages/rich-text/src/component/index.native.js
+++ b/packages/rich-text/src/component/index.native.js
@@ -111,6 +111,7 @@ export class RichText extends Component {
activeFormats: [],
selectedFormat: null,
height: 0,
+ isActive: ! this.props.isInnerBlock,
};
this.needsSelectionUpdate = false;
this.savedContent = '';
@@ -706,6 +707,7 @@ export class RichText extends Component {
// to determine if we should focus the RichText.
if ( this.props.blockIsSelected && ! this.props.__unstableMobileNoFocusOnMount ) {
this._editor.focus();
+ this.setState( { isActive: true } );
this.onSelectionChange( this.props.selectionStart || 0, this.props.selectionEnd || 0 );
}
}
@@ -713,6 +715,7 @@ export class RichText extends Component {
componentWillUnmount() {
if ( this._editor.isFocused() && this.props.shouldBlurOnUnmount ) {
this._editor.blur();
+ this.setState( { isActive: false } );
}
}
@@ -731,11 +734,15 @@ export class RichText extends Component {
if ( isSelected && ! prevIsSelected ) {
this._editor.focus();
+ this.setState( { isActive: true } );
// Update selection props explicitly when component is selected as Aztec won't call onSelectionChange
// if its internal value hasn't change. When created, default value is 0, 0
this.onSelectionChange( this.props.selectionStart || 0, this.props.selectionEnd || 0 );
} else if ( ! isSelected && prevIsSelected ) {
this._editor.blur();
+ if ( this.props.isInnerBlock ) {
+ this.setState( { isActive: false } );
+ }
}
}
@@ -778,7 +785,6 @@ export class RichText extends Component {
children,
getStylesFromColorScheme,
blockIsSelected,
- isParentSelected,
} = this.props;
const record = this.getRecord();
@@ -828,7 +834,7 @@ export class RichText extends Component {
this.firedAfterTextChanged = false;
}
- const lockOnFocus = blockIsSelected || isParentSelected ? {} : { pointerEvents: 'none' };
+ const lockOnFocus = blockIsSelected || this.state.isActive ? {} : { pointerEvents: 'none' };
return (
From fb9faffb9c966d1a298a5703819524db31bac95b Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Thu, 31 Oct 2019 14:11:45 +0100
Subject: [PATCH 026/183] initial changes
---
.../block-library/src/columns/edit.native.js | 296 ++++++++++++++++++
.../src/columns/editor.native.scss | 6 +
packages/block-library/src/columns/icon.js | 6 +-
packages/block-library/src/index.native.js | 2 +
4 files changed, 307 insertions(+), 3 deletions(-)
create mode 100644 packages/block-library/src/columns/edit.native.js
create mode 100644 packages/block-library/src/columns/editor.native.scss
diff --git a/packages/block-library/src/columns/edit.native.js b/packages/block-library/src/columns/edit.native.js
new file mode 100644
index 00000000000000..9ce12ed5a7cf11
--- /dev/null
+++ b/packages/block-library/src/columns/edit.native.js
@@ -0,0 +1,296 @@
+/**
+ * External dependencies
+ */
+import classnames from 'classnames';
+import { View } from 'react-native';
+import { dropRight, times } from 'lodash';
+
+/**
+ * WordPress dependencies
+ */
+import { __ } from '@wordpress/i18n';
+import {
+ PanelBody,
+ // RangeControl,
+ BottomSheet,
+ SVG,
+ Path,
+ Toolbar,
+ ToolbarButton,
+} from '@wordpress/components';
+import {
+ InspectorControls,
+ InnerBlocks,
+ BlockControls,
+ BlockVerticalAlignmentToolbar,
+} from '@wordpress/block-editor';
+import { withDispatch, useSelect } from '@wordpress/data';
+import { createBlock } from '@wordpress/blocks';
+import { useState, useEffect } from '@wordpress/element';
+
+/**
+ * Internal dependencies
+ */
+import {
+ getColumnsTemplate,
+ hasExplicitColumnWidths,
+ getMappedColumnWidths,
+ getRedistributedColumnWidths,
+ toWidthPrecision,
+} from './utils';
+import Icon from './icon';
+import styles from './editor.scss';
+
+/**
+ * Allowed blocks constant is passed to InnerBlocks precisely as specified here.
+ * The contents of the array should never change.
+ * The array should contain the name of each block that is allowed.
+ * In columns block, the only block we allow is 'core/column'.
+ *
+ * @constant
+ * @type {string[]}
+ */
+const ALLOWED_BLOCKS = [ 'core/column' ];
+
+/**
+ * Template option choices for predefined columns layouts.
+ *
+ * @constant
+ * @type {Array}
+ */
+const TEMPLATE_OPTIONS = [
+ {
+ title: __( 'Two columns; equal split' ),
+ icon: ,
+ template: [
+ [ 'core/column' ],
+ [ 'core/column' ],
+ ],
+ },
+ {
+ title: __( 'Two columns; one-third, two-thirds split' ),
+ icon: ,
+ template: [
+ [ 'core/column', { width: 33.33 } ],
+ [ 'core/column', { width: 66.66 } ],
+ ],
+ },
+ {
+ title: __( 'Two columns; two-thirds, one-third split' ),
+ icon: ,
+ template: [
+ [ 'core/column', { width: 66.66 } ],
+ [ 'core/column', { width: 33.33 } ],
+ ],
+ },
+ {
+ title: __( 'Three columns; equal split' ),
+ icon: ,
+ template: [
+ [ 'core/column' ],
+ [ 'core/column' ],
+ [ 'core/column' ],
+ ],
+ },
+ {
+ title: __( 'Three columns; wide center column' ),
+ icon: ,
+ template: [
+ [ 'core/column', { width: 25 } ],
+ [ 'core/column', { width: 50 } ],
+ [ 'core/column', { width: 25 } ],
+ ],
+ },
+];
+
+/**
+ * Number of columns to assume for template in case the user opts to skip
+ * template option selection.
+ *
+ * @type {number}
+ */
+const DEFAULT_COLUMNS = 2;
+
+export function ColumnsEdit( {
+ attributes,
+ className,
+ updateAlignment,
+ updateColumns,
+ clientId,
+ isSelected,
+} ) {
+ const { verticalAlignment } = attributes;
+
+ const { count } = useSelect( ( select ) => {
+ return {
+ count: select( 'core/block-editor' ).getBlockCount( clientId ),
+ };
+ } );
+ const [ template, setTemplate ] = useState( getColumnsTemplate( count ) );
+ const [ forceUseTemplate, setForceUseTemplate ] = useState( false );
+
+ // This is used to force the usage of the template even if the count doesn't match the template
+ // The count doesn't match the template once you use undo/redo (this is used to reset to the placeholder state).
+ useEffect( () => {
+ // Once the template is applied, reset it.
+ if ( forceUseTemplate ) {
+ setForceUseTemplate( false );
+ }
+ }, [ forceUseTemplate ] );
+
+ const classes = classnames( className, {
+ [ `are-vertically-aligned-${ verticalAlignment }` ]: verticalAlignment,
+ } );
+
+ // The template selector is shown when we first insert the columns block (count === 0).
+ // or if there's no template available.
+ // The count === 0 trick is useful when you use undo/redo.
+ const showTemplateSelector = ( count === 0 && ! forceUseTemplate ) || ! template;
+console.log(isSelected)
+
+ if ( ! isSelected ) {
+ return (
+
+ );
+ }
+console.log(count)
+ return (
+ <>
+ {/* { ! showTemplateSelector && ( */}
+ <>
+
+
+ {/* {
+ console.log(value)
+ updateColumns( count, value ) }
+ }
+ min={ 2 }
+ max={ 6 }
+ icon={ 'admin-links' }
+ />
+
+
+
+
+ }
+ onClick={ () => console.log('click') }
+ />
+
+
+
+ >
+ {/* ) } */}
+ {/* */}
+ {
+ // if ( nextTemplate === undefined ) {
+ // nextTemplate = getColumnsTemplate( DEFAULT_COLUMNS );
+ // }
+
+ // setTemplate( nextTemplate );
+ // setForceUseTemplate( true );
+ // } }
+ // __experimentalAllowTemplateOptionSkip
+ // template={ showTemplateSelector ? null : template }
+ // templateLock="all"
+ allowedBlocks={ ALLOWED_BLOCKS } />
+ {/* */}
+ >
+ );
+}
+
+export default withDispatch( ( dispatch, ownProps, registry ) => ( {
+ /**
+ * Update all child Column blocks with a new vertical alignment setting
+ * based on whatever alignment is passed in. This allows change to parent
+ * to overide anything set on a individual column basis.
+ *
+ * @param {string} verticalAlignment the vertical alignment setting
+ */
+ updateAlignment( verticalAlignment ) {
+ const { clientId, setAttributes } = ownProps;
+ const { updateBlockAttributes } = dispatch( 'core/block-editor' );
+ const { getBlockOrder } = registry.select( 'core/block-editor' );
+
+ // Update own alignment.
+ setAttributes( { verticalAlignment } );
+
+ // Update all child Column Blocks to match
+ const innerBlockClientIds = getBlockOrder( clientId );
+ innerBlockClientIds.forEach( ( innerBlockClientId ) => {
+ updateBlockAttributes( innerBlockClientId, {
+ verticalAlignment,
+ } );
+ } );
+ },
+
+ /**
+ * Updates the column count, including necessary revisions to child Column
+ * blocks to grant required or redistribute available space.
+ *
+ * @param {number} previousColumns Previous column count.
+ * @param {number} newColumns New column count.
+ */
+ updateColumns( previousColumns, newColumns ) {
+ const { clientId } = ownProps;
+ const { replaceInnerBlocks } = dispatch( 'core/block-editor' );
+ const { getBlocks } = registry.select( 'core/block-editor' );
+
+ let innerBlocks = getBlocks( clientId );
+ const hasExplicitWidths = hasExplicitColumnWidths( innerBlocks );
+
+ // Redistribute available width for existing inner blocks.
+ const isAddingColumn = newColumns > previousColumns;
+
+ if ( isAddingColumn && hasExplicitWidths ) {
+ // If adding a new column, assign width to the new column equal to
+ // as if it were `1 / columns` of the total available space.
+ const newColumnWidth = toWidthPrecision( 100 / newColumns );
+
+ // Redistribute in consideration of pending block insertion as
+ // constraining the available working width.
+ const widths = getRedistributedColumnWidths( innerBlocks, 100 - newColumnWidth );
+
+ innerBlocks = [
+ ...getMappedColumnWidths( innerBlocks, widths ),
+ ...times( newColumns - previousColumns, () => {
+ return createBlock( 'core/column', {
+ width: newColumnWidth,
+ } );
+ } ),
+ ];
+ } else if ( isAddingColumn ) {
+ innerBlocks = [
+ ...innerBlocks,
+ ...times( newColumns - previousColumns, () => {
+ return createBlock( 'core/column' );
+ } ),
+ ];
+ } else {
+ // The removed column will be the last of the inner blocks.
+ innerBlocks = dropRight( innerBlocks, previousColumns - newColumns );
+
+ if ( hasExplicitWidths ) {
+ // Redistribute as if block is already removed.
+ const widths = getRedistributedColumnWidths( innerBlocks, 100 );
+
+ innerBlocks = getMappedColumnWidths( innerBlocks, widths );
+ }
+ }
+
+ replaceInnerBlocks( clientId, innerBlocks, false );
+ },
+} ) )( ColumnsEdit );
diff --git a/packages/block-library/src/columns/editor.native.scss b/packages/block-library/src/columns/editor.native.scss
new file mode 100644
index 00000000000000..73c7706bfabfe5
--- /dev/null
+++ b/packages/block-library/src/columns/editor.native.scss
@@ -0,0 +1,6 @@
+.columnPlaceholder {
+ padding: 12px;
+ background-color: $white;
+ border: $border-width dashed $light-gray-500;
+ border-radius: 4px;
+}
\ No newline at end of file
diff --git a/packages/block-library/src/columns/icon.js b/packages/block-library/src/columns/icon.js
index f45aba71242c40..bcbbb79f33d867 100644
--- a/packages/block-library/src/columns/icon.js
+++ b/packages/block-library/src/columns/icon.js
@@ -3,6 +3,6 @@
*/
import { G, Path, SVG } from '@wordpress/components';
-export default (
-
-);
+const Icon = ( props ) => ;
+
+export default Icon
diff --git a/packages/block-library/src/index.native.js b/packages/block-library/src/index.native.js
index 0d06a9df9f11af..29f4baf524e616 100644
--- a/packages/block-library/src/index.native.js
+++ b/packages/block-library/src/index.native.js
@@ -144,6 +144,8 @@ export const registerCoreBlocks = () => {
mediaText,
// eslint-disable-next-line no-undef
!! __DEV__ ? group : null,
+ // eslint-disable-next-line no-undef
+ !! __DEV__ ? columns : null,
].forEach( registerBlock );
setDefaultBlockName( paragraph.name );
From ed9a435de43f2dc85d155a9ff728bd2473e27d19 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Mon, 4 Nov 2019 09:39:06 +0100
Subject: [PATCH 027/183] add getPrefferedColorScheme for dashed border
---
.../block-editor/src/components/block-list/block.native.js | 6 ++++--
.../src/components/block-list/block.native.scss | 4 ++++
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 32091dfa315dd5..df0e8c9dbd129a 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -13,7 +13,7 @@ import {
import { Component } from '@wordpress/element';
import { ToolbarButton, Toolbar } from '@wordpress/components';
import { withDispatch, withSelect } from '@wordpress/data';
-import { compose } from '@wordpress/compose';
+import { compose, withPreferredColorScheme } from '@wordpress/compose';
import { getBlockType } from '@wordpress/blocks';
import { __, sprintf } from '@wordpress/i18n';
@@ -136,13 +136,14 @@ class BlockListBlock extends Component {
isGroupType,
parentId,
isMediaTextParent,
+ getStylesFromColorScheme,
} = this.props;
if ( ! isDashed && isInnerBlock && ! isChildOfSameRootBlook ) {
return styles.blockContainerInner;
}
- const defaultStyle = [ isDashed ? styles.blockHolderDashedBordered : styles.blockContainer ];
+ const defaultStyle = [ isDashed ? getStylesFromColorScheme( styles.blockHolderDashedBordered, styles.blockHolderDashedBorderedDark ) : styles.blockContainer ];
if ( isMediaTextParent ) {
return [ ...defaultStyle, styles.blockContainerMediaTextInner ];
@@ -357,4 +358,5 @@ export default compose( [
},
};
} ),
+ withPreferredColorScheme,
] )( BlockListBlock );
diff --git a/packages/block-editor/src/components/block-list/block.native.scss b/packages/block-editor/src/components/block-list/block.native.scss
index 0fd7c8c678159e..af98399c9f063d 100644
--- a/packages/block-editor/src/components/block-list/block.native.scss
+++ b/packages/block-editor/src/components/block-list/block.native.scss
@@ -52,6 +52,10 @@
margin-top: 6px;
}
+.blockHolderDashedBorderedDark {
+ border-color: $gray-70;
+}
+
.horizontalMarginNone {
margin-left: 0;
margin-right: 0;
From aafa45216696f1666a5d3de5ae8c9c076629cea1 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Mon, 4 Nov 2019 10:10:09 +0100
Subject: [PATCH 028/183] enable FloatingToolbar for MediaText
---
packages/block-editor/src/components/block-list/block.native.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index df0e8c9dbd129a..5b9793190fc824 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -274,7 +274,7 @@ export default compose( [
const rootBlock = getBlock( rootBlockId );
const hasRootInnerBlocks = rootBlock.innerBlocks.length !== 0;
- const showFloatingToolbar = isSelected && hasRootInnerBlocks && ! isMediaText && ! isMediaTextParent;
+ const showFloatingToolbar = isSelected && hasRootInnerBlocks;
const firstToSelectId = getFirstToSelectBlock( clientId );
From dffabf93e4210768504b9113927d7f5e002f50db Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Mon, 4 Nov 2019 10:18:27 +0100
Subject: [PATCH 029/183] refactor rich text handler
---
packages/rich-text/src/component/index.native.js | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/packages/rich-text/src/component/index.native.js b/packages/rich-text/src/component/index.native.js
index ba35c60e626690..2a0094dc1d6471 100644
--- a/packages/rich-text/src/component/index.native.js
+++ b/packages/rich-text/src/component/index.native.js
@@ -75,6 +75,7 @@ export class RichText extends Component {
this.formatToValue.bind( this ),
{ maxSize: 1 }
);
+ this.makeActive = this.makeActive.bind( this );
// This prevents a bug in Aztec which triggers onSelectionChange twice on format change
this.onSelectionChange = this.onSelectionChange.bind( this );
@@ -542,7 +543,7 @@ export class RichText extends Component {
// to determine if we should focus the RichText.
if ( this.props.blockIsSelected && ! this.props.__unstableMobileNoFocusOnMount ) {
this._editor.focus();
- this.setState( { isActive: true } );
+ this.makeActive( true );
this.onSelectionChange( this.props.selectionStart || 0, this.props.selectionEnd || 0 );
}
}
@@ -550,7 +551,7 @@ export class RichText extends Component {
componentWillUnmount() {
if ( this._editor.isFocused() && this.props.shouldBlurOnUnmount ) {
this._editor.blur();
- this.setState( { isActive: false } );
+ this.makeActive( false );
}
}
@@ -569,18 +570,22 @@ export class RichText extends Component {
if ( isSelected && ! prevIsSelected ) {
this._editor.focus();
- this.setState( { isActive: true } );
+ this.makeActive( true );
// Update selection props explicitly when component is selected as Aztec won't call onSelectionChange
// if its internal value hasn't change. When created, default value is 0, 0
this.onSelectionChange( this.props.selectionStart || 0, this.props.selectionEnd || 0 );
} else if ( ! isSelected && prevIsSelected ) {
this._editor.blur();
if ( this.props.isInnerBlock ) {
- this.setState( { isActive: false } );
+ this.makeActive( false );
}
}
}
+ makeActive( isActive ) {
+ this.setState( { isActive } );
+ }
+
willTrimSpaces( html ) {
// regex for detecting spaces around block element html tags
const blockHtmlElements = '(div|br|blockquote|ul|ol|li|p|pre|h1|h2|h3|h4|h5|h6|iframe|hr)';
From 4576c6aa7272b3b1af447ed02a6756ec644d7ac0 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Mon, 4 Nov 2019 21:55:21 +0100
Subject: [PATCH 030/183] change dark-mode block holder border to blue
---
.../block-editor/src/components/block-list/style.native.scss | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/block-editor/src/components/block-list/style.native.scss b/packages/block-editor/src/components/block-list/style.native.scss
index 541a35d42a19a3..efc4ff4cde6a2e 100644
--- a/packages/block-editor/src/components/block-list/style.native.scss
+++ b/packages/block-editor/src/components/block-list/style.native.scss
@@ -76,7 +76,7 @@
}
.blockHolderFocusedDark {
- border-color: $gray-70;
+ border-color: $blue-30;
}
.blockListFooter {
From 90ae89473605720ecc22ba92eede2ef78e581956 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Tue, 5 Nov 2019 10:24:23 +0100
Subject: [PATCH 031/183] dark-mode for group appender and placeholder
---
.../button-block-appender/index.native.js | 16 ++++++++++------
.../button-block-appender/styles.native.scss | 10 ++++++++++
packages/block-library/src/group/edit.native.js | 6 ++++--
.../block-library/src/group/editor.native.scss | 6 ++++++
4 files changed, 30 insertions(+), 8 deletions(-)
diff --git a/packages/block-editor/src/components/button-block-appender/index.native.js b/packages/block-editor/src/components/button-block-appender/index.native.js
index b01d3b65109856..3c0250c0302d30 100644
--- a/packages/block-editor/src/components/button-block-appender/index.native.js
+++ b/packages/block-editor/src/components/button-block-appender/index.native.js
@@ -6,6 +6,7 @@ import { View } from 'react-native';
/**
* WordPress dependencies
*/
+import { withPreferredColorScheme } from '@wordpress/compose';
import { Button, Dashicon } from '@wordpress/components';
/**
@@ -14,7 +15,10 @@ import { Button, Dashicon } from '@wordpress/components';
import Inserter from '../inserter';
import styles from './styles.scss';
-function ButtonBlockAppender( { rootClientId } ) {
+function ButtonBlockAppender( { rootClientId, getStylesFromColorScheme } ) {
+ const appenderStyle = getStylesFromColorScheme( styles.appender, styles.appenderDark );
+ const addBlockButtonStyle = getStylesFromColorScheme( styles.addBlockButton, styles.addBlockButtonDark );
+
return (
<>
-
+
@@ -45,4 +49,4 @@ function ButtonBlockAppender( { rootClientId } ) {
/**
* @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/button-block-appender/README.md
*/
-export default ButtonBlockAppender;
+export default withPreferredColorScheme( ButtonBlockAppender );
diff --git a/packages/block-editor/src/components/button-block-appender/styles.native.scss b/packages/block-editor/src/components/button-block-appender/styles.native.scss
index 46b4a055cd5bd4..ef40ee4946d5ab 100644
--- a/packages/block-editor/src/components/button-block-appender/styles.native.scss
+++ b/packages/block-editor/src/components/button-block-appender/styles.native.scss
@@ -9,6 +9,11 @@
border-radius: 4px;
}
+.appenderDark {
+ background-color: $background-dark-secondary;
+ border: $border-width solid $gray-50;
+}
+
.addBlockButton {
color: $white;
background-color: $gray;
@@ -16,3 +21,8 @@
overflow: hidden;
size: $icon-button-size-small;
}
+
+.addBlockButtonDark {
+ color: $background-dark-secondary;
+ background-color: $gray-50;
+}
diff --git a/packages/block-library/src/group/edit.native.js b/packages/block-library/src/group/edit.native.js
index 32c87e3863c881..6b860a21fdd350 100644
--- a/packages/block-library/src/group/edit.native.js
+++ b/packages/block-library/src/group/edit.native.js
@@ -8,7 +8,7 @@ import { View } from 'react-native';
* WordPress dependencies
*/
import { withSelect } from '@wordpress/data';
-import { compose } from '@wordpress/compose';
+import { compose, withPreferredColorScheme } from '@wordpress/compose';
import {
InnerBlocks,
withColors,
@@ -21,10 +21,11 @@ import styles from './editor.scss';
function GroupEdit( {
hasInnerBlocks,
isSelected,
+ getStylesFromColorScheme,
} ) {
if ( ! isSelected && ! hasInnerBlocks ) {
return (
-
+
);
}
@@ -48,4 +49,5 @@ export default compose( [
hasInnerBlocks: !! ( block && block.innerBlocks.length ),
};
} ),
+ withPreferredColorScheme,
] )( GroupEdit );
diff --git a/packages/block-library/src/group/editor.native.scss b/packages/block-library/src/group/editor.native.scss
index 5edfa582287ef5..22e508bcaa1311 100644
--- a/packages/block-library/src/group/editor.native.scss
+++ b/packages/block-library/src/group/editor.native.scss
@@ -1,6 +1,12 @@
.groupPlaceholder {
padding: 12px;
+ margin: 9px;
background-color: $white;
border: $border-width dashed $light-gray-500;
border-radius: 4px;
}
+
+.groupPlaceholderDark {
+ background-color: $black;
+ border: $border-width dashed $gray-70;
+}
From d8d4e1d2fffecd113c8fa57688d5ed3f904418b2 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Tue, 5 Nov 2019 11:01:10 +0100
Subject: [PATCH 032/183] adjust margin for group placeholder
---
.../src/components/block-list/block.native.js | 5 +++++
.../button-block-appender/styles.native.scss | 8 ++++----
.../block-library/src/group/edit.native.js | 13 ++++++++++++-
.../block-library/src/group/editor.native.scss | 18 +++++++++++++++++-
4 files changed, 38 insertions(+), 6 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 5b9793190fc824..aa449c1901b03c 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -71,6 +71,9 @@ class BlockListBlock extends Component {
onCaretVerticalPositionChange={ this.props.onCaretVerticalPositionChange }
clientId={ this.props.clientId }
isInnerBlock={ this.props.isInnerBlock }
+ isDashed={ this.props.isDashed }
+ isChildOfSameRootBlook={ this.props.isChildOfSameRootBlook }
+ isGroupParent={ this.props.isGroupParent }
/>
);
}
@@ -266,6 +269,7 @@ export default compose( [
const selectedBlock = getSelectedBlock();
const parentId = getBlockRootClientId( clientId );
const parentBlock = getBlock( parentId );
+ const isGroupParent = parentBlock && parentBlock.name === 'core/group';
const isMediaText = selectedBlock && selectedBlock.name === 'core/media-text';
const isMediaTextParent = parentBlock && parentBlock.name === 'core/media-text';
@@ -313,6 +317,7 @@ export default compose( [
isParentSelected,
isMediaTextParent,
isMediaText,
+ isGroupParent,
};
} ),
withDispatch( ( dispatch, ownProps, { select } ) => {
diff --git a/packages/block-editor/src/components/button-block-appender/styles.native.scss b/packages/block-editor/src/components/button-block-appender/styles.native.scss
index ef40ee4946d5ab..55d4cf6b20089c 100644
--- a/packages/block-editor/src/components/button-block-appender/styles.native.scss
+++ b/packages/block-editor/src/components/button-block-appender/styles.native.scss
@@ -2,8 +2,8 @@
align-items: center;
justify-content: center;
padding: 12px;
- margin-left: 2px;
- margin-right: 2px;
+ margin-left: 9px;
+ margin-right: 9px;
background-color: $white;
border: $border-width solid $light-gray-500;
border-radius: 4px;
@@ -11,7 +11,7 @@
.appenderDark {
background-color: $background-dark-secondary;
- border: $border-width solid $gray-50;
+ border: $border-width solid $gray-70;
}
.addBlockButton {
@@ -24,5 +24,5 @@
.addBlockButtonDark {
color: $background-dark-secondary;
- background-color: $gray-50;
+ background-color: $gray;
}
diff --git a/packages/block-library/src/group/edit.native.js b/packages/block-library/src/group/edit.native.js
index 6b860a21fdd350..2b8b37857e72ca 100644
--- a/packages/block-library/src/group/edit.native.js
+++ b/packages/block-library/src/group/edit.native.js
@@ -22,10 +22,21 @@ function GroupEdit( {
hasInnerBlocks,
isSelected,
getStylesFromColorScheme,
+ isInnerBlock,
+ isDashed,
+ isChildOfSameRootBlook,
+ isParentSelected,
+ isGroupParent,
} ) {
if ( ! isSelected && ! hasInnerBlocks ) {
return (
-
+
);
}
diff --git a/packages/block-library/src/group/editor.native.scss b/packages/block-library/src/group/editor.native.scss
index 22e508bcaa1311..3d5cdbe80175ab 100644
--- a/packages/block-library/src/group/editor.native.scss
+++ b/packages/block-library/src/group/editor.native.scss
@@ -1,11 +1,27 @@
.groupPlaceholder {
padding: 12px;
- margin: 9px;
+ margin: 16px;
background-color: $white;
border: $border-width dashed $light-gray-500;
border-radius: 4px;
}
+.groupPlaceholderInner {
+ border: 0;
+ padding: 4px;
+}
+
+.groupPlaceholderMarginVerticalNone {
+ margin-top: 0;
+ margin-bottom: 0;
+ padding: 12px;
+}
+
+.groupPlaceholderMarginHorizontalNone {
+ margin-left: 0;
+ margin-right: 0;
+}
+
.groupPlaceholderDark {
background-color: $black;
border: $border-width dashed $gray-70;
From 677aade342a93dbb4205ff0ba9e4e94320accff4 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Tue, 5 Nov 2019 12:24:53 +0100
Subject: [PATCH 033/183] adjust innerblock margin for media-text
---
.../block-editor/src/components/block-list/block.native.scss | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.scss b/packages/block-editor/src/components/block-list/block.native.scss
index af98399c9f063d..8cff000ac59ba6 100644
--- a/packages/block-editor/src/components/block-list/block.native.scss
+++ b/packages/block-editor/src/components/block-list/block.native.scss
@@ -25,7 +25,7 @@
padding-right: 0;
padding-top: 6px;
padding-bottom: 6px;
- margin-bottom: 0;
+ margin-bottom: 6px;
margin-top: 0;
}
From 168c3a2c0970cd3bac48c81b3035eb10fb7df107 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Tue, 5 Nov 2019 12:59:05 +0100
Subject: [PATCH 034/183] adjust group placeholder border color
---
packages/block-library/src/group/editor.native.scss | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/block-library/src/group/editor.native.scss b/packages/block-library/src/group/editor.native.scss
index 3d5cdbe80175ab..b93b8e997a024a 100644
--- a/packages/block-library/src/group/editor.native.scss
+++ b/packages/block-library/src/group/editor.native.scss
@@ -2,7 +2,7 @@
padding: 12px;
margin: 16px;
background-color: $white;
- border: $border-width dashed $light-gray-500;
+ border: $border-width dashed $gray;
border-radius: 4px;
}
From e8464a0db734d85a9c44ca90de269990f3284e41 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Wed, 6 Nov 2019 12:37:07 +0100
Subject: [PATCH 035/183] adjust appender button color
---
.../src/components/button-block-appender/styles.native.scss | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/block-editor/src/components/button-block-appender/styles.native.scss b/packages/block-editor/src/components/button-block-appender/styles.native.scss
index 55d4cf6b20089c..db3aac95d99a8e 100644
--- a/packages/block-editor/src/components/button-block-appender/styles.native.scss
+++ b/packages/block-editor/src/components/button-block-appender/styles.native.scss
@@ -24,5 +24,5 @@
.addBlockButtonDark {
color: $background-dark-secondary;
- background-color: $gray;
+ background-color: $gray-40;
}
From 7a500e12dd20f8af6557c87cc5f283803402e365 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Wed, 6 Nov 2019 12:44:20 +0100
Subject: [PATCH 036/183] re-activate the stacking vertically on Media & Text
---
packages/block-library/src/media-text/edit.native.js | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/packages/block-library/src/media-text/edit.native.js b/packages/block-library/src/media-text/edit.native.js
index 22cccb6de27273..476068792c1379 100644
--- a/packages/block-library/src/media-text/edit.native.js
+++ b/packages/block-library/src/media-text/edit.native.js
@@ -133,16 +133,15 @@ class MediaTextEdit extends Component {
backgroundColor,
setAttributes,
isSelected,
- // isMobile,
+ isMobile,
} = this.props;
const {
- // isStackedOnMobile,
+ isStackedOnMobile,
mediaPosition,
mediaWidth,
verticalAlignment,
} = attributes;
- const shouldStack = false; // We are temporarily not stacking until we fix alignment buttons
- // const shouldStack = isStackedOnMobile && isMobile; // <<< Original line
+ const shouldStack = isStackedOnMobile && isMobile;
const temporaryMediaWidth = shouldStack ? 100 : ( this.state.mediaWidth || mediaWidth );
const widthString = `${ temporaryMediaWidth }%`;
const containerStyles = {
From c8f7476230b12be7964406d9f2a531e8f4cd147b Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Thu, 7 Nov 2019 13:32:49 +0100
Subject: [PATCH 037/183] WIP: add key extractor and slider
---
.../src/components/block-list/index.native.js | 3 ++
.../block-library/src/columns/edit.native.js | 41 ++++++++++++++-----
2 files changed, 33 insertions(+), 11 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/index.native.js b/packages/block-editor/src/components/block-list/index.native.js
index 486b8fb94968c3..3886b2f9eb99f7 100644
--- a/packages/block-editor/src/components/block-list/index.native.js
+++ b/packages/block-editor/src/components/block-list/index.native.js
@@ -101,6 +101,9 @@ export class BlockList extends Component {
ListHeaderComponent={ header }
ListEmptyComponent={ this.renderDefaultBlockAppender }
ListFooterComponent={ withFooter && this.renderBlockListFooter }
+ listKey={(item, index) => {
+ return clientId;
+ }}
/>
{ renderAppender && blockClientIds.length > 0 &&
diff --git a/packages/block-library/src/columns/edit.native.js b/packages/block-library/src/columns/edit.native.js
index 9ce12ed5a7cf11..cbcf90e31c85b7 100644
--- a/packages/block-library/src/columns/edit.native.js
+++ b/packages/block-library/src/columns/edit.native.js
@@ -11,7 +11,7 @@ import { dropRight, times } from 'lodash';
import { __ } from '@wordpress/i18n';
import {
PanelBody,
- // RangeControl,
+ RangeControl,
BottomSheet,
SVG,
Path,
@@ -50,7 +50,8 @@ import styles from './editor.scss';
* @constant
* @type {string[]}
*/
-const ALLOWED_BLOCKS = [ 'core/column' ];
+// const ALLOWED_BLOCKS = [ 'core/column' ];
+const ALLOWED_BLOCKS = [ 'core/button', 'core/paragraph', 'core/heading', 'core/list' ];
/**
* Template option choices for predefined columns layouts.
@@ -128,6 +129,7 @@ export function ColumnsEdit( {
} );
const [ template, setTemplate ] = useState( getColumnsTemplate( count ) );
const [ forceUseTemplate, setForceUseTemplate ] = useState( false );
+ const [ columnCount, setColumnCount ] = useState( DEFAULT_COLUMNS );
// This is used to force the usage of the template even if the count doesn't match the template
// The count doesn't match the template once you use undo/redo (this is used to reset to the placeholder state).
@@ -146,28 +148,40 @@ export function ColumnsEdit( {
// or if there's no template available.
// The count === 0 trick is useful when you use undo/redo.
const showTemplateSelector = ( count === 0 && ! forceUseTemplate ) || ! template;
-console.log(isSelected)
if ( ! isSelected ) {
return (
);
}
-console.log(count)
+
+const renderColumns = () => {
+ return [...Array(columnCount)].map((e, i) =>
+ {
+ return i+"_"+index+'_'+item.id+"_";
+ }}
+ />
+ )
+ }
+
return (
<>
{/* { ! showTemplateSelector && ( */}
<>
- {/* {
+ onChange={ ( value ) => {
console.log(value)
- updateColumns( count, value ) }
+ setColumnCount( value )
+ // updateColumns( count, value )
+ }
}
min={ 2 }
max={ 6 }
@@ -191,8 +205,8 @@ console.log(count)
>
{/* ) } */}
{/* */}
- {
@@ -206,7 +220,12 @@ console.log(count)
// __experimentalAllowTemplateOptionSkip
// template={ showTemplateSelector ? null : template }
// templateLock="all"
- allowedBlocks={ ALLOWED_BLOCKS } />
+ allowedBlocks={ ALLOWED_BLOCKS }
+ listKey={(item, index) => {
+ return "_"+index+'_'+item.id;
+ }}
+ /> */}
+
{/* */}
>
);
From f94c828bc576938adebbf2c7b688c6cccaa2cd1f Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Fri, 8 Nov 2019 12:50:21 +0100
Subject: [PATCH 038/183] CR changes
---
.../src/components/block-list/block.native.js | 34 ++++++++-----------
1 file changed, 15 insertions(+), 19 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index aa449c1901b03c..e81e8041dcdb70 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -72,7 +72,7 @@ class BlockListBlock extends Component {
clientId={ this.props.clientId }
isInnerBlock={ this.props.isInnerBlock }
isDashed={ this.props.isDashed }
- isChildOfSameRootBlook={ this.props.isChildOfSameRootBlook }
+ isChildOfSameRootBlock={ this.props.isChildOfSameRootBlock }
isGroupParent={ this.props.isGroupParent }
/>
);
@@ -115,10 +115,10 @@ class BlockListBlock extends Component {
const {
isInnerBlock,
isNestedInnerBlock,
- isGroupType,
+ hasInnerBlock,
} = this.props;
- if ( isNestedInnerBlock || isGroupType ) {
+ if ( isNestedInnerBlock || hasInnerBlock ) {
return styles.nestedFocusedBlock;
}
@@ -135,14 +135,14 @@ class BlockListBlock extends Component {
isDimmed,
isNestedInnerBlock,
isInnerBlock,
- isChildOfSameRootBlook,
- isGroupType,
+ isChildOfSameRootBlock,
+ hasInnerBlock,
parentId,
isMediaTextParent,
getStylesFromColorScheme,
} = this.props;
- if ( ! isDashed && isInnerBlock && ! isChildOfSameRootBlook ) {
+ if ( ! isDashed && isInnerBlock && ! isChildOfSameRootBlock ) {
return styles.blockContainerInner;
}
@@ -159,7 +159,7 @@ class BlockListBlock extends Component {
return [ ...defaultStyle, styles.nestedBlockContainerInner ];
}
- if ( isGroupType && ( ! parentId || isChildOfSameRootBlook ) ) {
+ if ( hasInnerBlock && ( ! parentId || isChildOfSameRootBlock ) ) {
return [ ...defaultStyle, styles.horizontalMarginNone ];
}
@@ -182,7 +182,7 @@ class BlockListBlock extends Component {
isDimmed,
isInnerBlock,
isNestedInnerBlock,
- isGroupType,
+ hasInnerBlock,
isMediaTextParent,
} = this.props;
@@ -213,9 +213,9 @@ class BlockListBlock extends Component {
@@ -226,7 +226,7 @@ class BlockListBlock extends Component {
! isSelected && this.applyUnSelectedStyle(),
isSelected && this.applySelectedStyle(),
isDimmed && styles.blockContainerDimmed,
- isGroupType && styles.verticalPaddingNone,
+ hasInnerBlock && styles.verticalPaddingNone,
] }
>
{ isValid && this.getBlockForType() }
@@ -253,7 +253,6 @@ export default compose( [
getSelectedBlockClientId,
getBlock,
getBlockRootClientId,
- getSelectedBlock,
getFirstToSelectBlock,
} = select( 'core/block-editor' );
const order = getBlockIndex( clientId, rootClientId );
@@ -266,12 +265,10 @@ export default compose( [
const icon = blockType.icon;
const getAccessibilityLabelExtra = blockType.__experimentalGetAccessibilityLabel;
- const selectedBlock = getSelectedBlock();
const parentId = getBlockRootClientId( clientId );
const parentBlock = getBlock( parentId );
const isGroupParent = parentBlock && parentBlock.name === 'core/group';
- const isMediaText = selectedBlock && selectedBlock.name === 'core/media-text';
const isMediaTextParent = parentBlock && parentBlock.name === 'core/media-text';
const rootBlockId = getBlockHierarchyRootClientId( clientId );
@@ -289,9 +286,9 @@ export default compose( [
const isDimmed = ! isSelected && ! isRootSiblingsSelected && !! selectedBlockClientId && firstToSelectId === clientId && ! isDashed;
const isInnerBlock = parentId && firstToSelectId !== parentId;
- const isChildOfSameRootBlook = rootBlockId === getBlockHierarchyRootClientId( selectedBlockClientId );
+ const isChildOfSameRootBlock = rootBlockId === getBlockHierarchyRootClientId( selectedBlockClientId );
const isNestedInnerBlock = ! isDashed && selectedBlockClientId === getBlockRootClientId( firstToSelectId );
- const isGroupType = blockType.name === 'core/group' || blockType.name === 'core/media-text';
+ const hasInnerBlock = blockType.name === 'core/group' || blockType.name === 'core/media-text';
const isParentSelected = parentId === selectedBlockClientId;
return {
@@ -311,12 +308,11 @@ export default compose( [
isDimmed,
firstToSelectId,
isInnerBlock,
- isChildOfSameRootBlook,
+ isChildOfSameRootBlock,
isNestedInnerBlock,
- isGroupType,
+ hasInnerBlock,
isParentSelected,
isMediaTextParent,
- isMediaText,
isGroupParent,
};
} ),
From 845f92052664113a2e577adfe912bae3c58a7ad9 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Tue, 12 Nov 2019 14:50:45 +0100
Subject: [PATCH 039/183] CR changes for Android RichText focus
---
.../block-editor/src/components/block-list/block.native.js | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index e81e8041dcdb70..d03be6a3240d8a 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -5,6 +5,7 @@ import {
View,
Text,
TouchableWithoutFeedback,
+ Platform,
} from 'react-native';
/**
@@ -184,6 +185,7 @@ class BlockListBlock extends Component {
isNestedInnerBlock,
hasInnerBlock,
isMediaTextParent,
+ isTouchable,
} = this.props;
const borderColor = isSelected ? focusedBorderColor : 'transparent';
@@ -228,6 +230,7 @@ class BlockListBlock extends Component {
isDimmed && styles.blockContainerDimmed,
hasInnerBlock && styles.verticalPaddingNone,
] }
+ { ...isTouchable }
>
{ isValid && this.getBlockForType() }
{ ! isValid &&
@@ -290,6 +293,7 @@ export default compose( [
const isNestedInnerBlock = ! isDashed && selectedBlockClientId === getBlockRootClientId( firstToSelectId );
const hasInnerBlock = blockType.name === 'core/group' || blockType.name === 'core/media-text';
const isParentSelected = parentId === selectedBlockClientId;
+ const isTouchable = ( Platform.OS !== 'android' || firstToSelectId !== clientId ) ? {} : { pointerEvents: 'none' };
return {
icon,
@@ -314,6 +318,7 @@ export default compose( [
isParentSelected,
isMediaTextParent,
isGroupParent,
+ isTouchable,
};
} ),
withDispatch( ( dispatch, ownProps, { select } ) => {
From 35d8c8b377f1bab5062cff344fe4dda6afbd9958 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Wed, 13 Nov 2019 14:16:38 +0100
Subject: [PATCH 040/183] CR changes for MediaText margins
---
.../block-editor/src/components/block-list/block.native.js | 4 ++++
packages/block-library/src/media-text/edit.native.js | 6 +++++-
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index d03be6a3240d8a..f033b4607a1c0e 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -75,6 +75,8 @@ class BlockListBlock extends Component {
isDashed={ this.props.isDashed }
isChildOfSameRootBlock={ this.props.isChildOfSameRootBlock }
isGroupParent={ this.props.isGroupParent }
+ parentId={ this.props.parentId }
+ isMediaTextChildSelected={ this.props.isMediaTextChildSelected }
/>
);
}
@@ -294,6 +296,7 @@ export default compose( [
const hasInnerBlock = blockType.name === 'core/group' || blockType.name === 'core/media-text';
const isParentSelected = parentId === selectedBlockClientId;
const isTouchable = ( Platform.OS !== 'android' || firstToSelectId !== clientId ) ? {} : { pointerEvents: 'none' };
+ const isMediaTextChildSelected = blockType.name === 'core/media-text' && getBlockRootClientId( selectedBlockClientId ) === clientId;
return {
icon,
@@ -319,6 +322,7 @@ export default compose( [
isMediaTextParent,
isGroupParent,
isTouchable,
+ isMediaTextChildSelected,
};
} ),
withDispatch( ( dispatch, ownProps, { select } ) => {
diff --git a/packages/block-library/src/media-text/edit.native.js b/packages/block-library/src/media-text/edit.native.js
index 476068792c1379..4faec2dda67aac 100644
--- a/packages/block-library/src/media-text/edit.native.js
+++ b/packages/block-library/src/media-text/edit.native.js
@@ -144,6 +144,8 @@ class MediaTextEdit extends Component {
const shouldStack = isStackedOnMobile && isMobile;
const temporaryMediaWidth = shouldStack ? 100 : ( this.state.mediaWidth || mediaWidth );
const widthString = `${ temporaryMediaWidth }%`;
+ const mediaContainerPadding = ( ( this.props.isInnerBlock || this.props.parentId ) && ! this.props.isMediaTextChildSelected ) ? 0 : 16;
+ const mediaContainerVerticalPadding = isSelected ? 8 : 5;
const containerStyles = {
...styles[ 'wp-block-media-text' ],
...styles[ `is-vertically-aligned-${ verticalAlignment }` ],
@@ -151,7 +153,9 @@ class MediaTextEdit extends Component {
...( shouldStack ? styles[ 'is-stacked-on-mobile' ] : {} ),
...( shouldStack && mediaPosition === 'right' ? styles[ 'is-stacked-on-mobile.has-media-on-the-right' ] : {} ),
backgroundColor: backgroundColor.color,
- ...{ padding: isSelected ? 8 : 16 },
+ ...{ padding: isSelected ? 8 : mediaContainerPadding },
+ paddingTop: mediaContainerVerticalPadding,
+ paddingBottom: mediaContainerVerticalPadding,
};
const innerBlockWidth = shouldStack ? 100 : ( 100 - temporaryMediaWidth );
const innerBlockWidthString = `${ innerBlockWidth }%`;
From 7eba06d7a4cdcff22e0172010994358d8293c1dd Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Wed, 13 Nov 2019 16:09:11 +0100
Subject: [PATCH 041/183] CR changes for getTree selector
---
packages/block-editor/src/store/selectors.js | 43 ++++++++------------
1 file changed, 18 insertions(+), 25 deletions(-)
diff --git a/packages/block-editor/src/store/selectors.js b/packages/block-editor/src/store/selectors.js
index 5aba4bb1257ed9..c7b277382508b3 100644
--- a/packages/block-editor/src/store/selectors.js
+++ b/packages/block-editor/src/store/selectors.js
@@ -426,24 +426,16 @@ export function getBlockRootClientId( state, clientId ) {
*
* @param {Object} state Editor state.
* @param {string} clientId Block from which to find root client ID.
+ * @param {boolean} getDependants Apply createSelector function to call getDependants.
+ * @param {boolean} includeClientId Include client ID in return array.
*
* @return {Array} ClientIDs of the parent blocks.
*/
-export const getBlockParents = createSelector(
- ( state, clientId ) => {
- const parents = [];
- let current = clientId;
- while ( !! state.blocks.parents[ current ] ) {
- current = state.blocks.parents[ current ];
- parents.push( current );
- }
-
- return parents.reverse();
- },
- ( state ) => [
- state.blocks.parents,
- ]
-);
+export const getBlockParents = ( state, clientId, getDependants = true, includeClientId = false ) => {
+ return getDependants ?
+ createSelector( getTree( state, clientId, true ), ( dependantState ) => [ dependantState.blocks.parents ] ) :
+ getTree( state, clientId, false, includeClientId );
+};
/**
* Given a block client ID, returns the root of the hierarchy from which the block is nested, return the block itself for root level blocks.
@@ -468,19 +460,20 @@ export function getBlockHierarchyRootClientId( state, clientId ) {
*
* @param {Object} state Editor state.
* @param {string} clientId Block from which tree will be created.
+ * @param {boolean} reverse Get parent hierarchy in reverse order (top-most hierarchy first).
+ * @param {boolean} includeClientId Include client ID in return array.
*
* @return {Array} Hierarchy tree of client ID.
*/
-export function getTree( state, clientId ) {
+export function getTree( state, clientId, reverse = true, includeClientId = false ) {
+ const parents = includeClientId ? [ clientId ] : [];
let current = clientId;
- const tree = [ current ];
- do {
+ while ( !! state.blocks.parents[ current ] ) {
current = state.blocks.parents[ current ];
- if ( current ) {
- tree.push( current );
- }
- } while ( current );
- return tree;
+ parents.push( current );
+ }
+
+ return reverse ? parents.reverse() : parents;
}
/**
@@ -493,7 +486,7 @@ export function getTree( state, clientId ) {
*/
export function getFirstToSelectBlock( state, clientId ) {
const selectedId = getSelectedBlockClientId( state );
- const clientTree = getTree( state, clientId );
+ const clientTree = getBlockParents( state, clientId, false, true );
const rootParent = clientTree[ clientTree.length - 1 ];
let index = 0;
@@ -511,7 +504,7 @@ export function getFirstToSelectBlock( state, clientId ) {
return rootParent;
}
- const selectedTree = getTree( state, selectedId );
+ const selectedTree = getBlockParents( state, selectedId, false, true );
do {
const commonParentIndex = clientTree.indexOf( selectedTree[ index ] );
From 48a62f4d4cffcf6d3148bef3705747f29c728b20 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Fri, 15 Nov 2019 10:58:16 +0100
Subject: [PATCH 042/183] CR changes: fix selection loop
---
.../src/components/block-list/block.native.js | 5 ++---
.../block-library/src/heading/edit.native.js | 2 --
.../block-library/src/paragraph/edit.native.js | 1 -
packages/rich-text/src/component/index.native.js | 16 ----------------
4 files changed, 2 insertions(+), 22 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index f033b4607a1c0e..4646a6ec2ad798 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -5,7 +5,6 @@ import {
View,
Text,
TouchableWithoutFeedback,
- Platform,
} from 'react-native';
/**
@@ -225,6 +224,7 @@ class BlockListBlock extends Component {
}>
{ showTitle && this.renderBlockTitle() }
{ isValid && this.getBlockForType() }
{ ! isValid &&
@@ -295,7 +294,7 @@ export default compose( [
const isNestedInnerBlock = ! isDashed && selectedBlockClientId === getBlockRootClientId( firstToSelectId );
const hasInnerBlock = blockType.name === 'core/group' || blockType.name === 'core/media-text';
const isParentSelected = parentId === selectedBlockClientId;
- const isTouchable = ( Platform.OS !== 'android' || firstToSelectId !== clientId ) ? {} : { pointerEvents: 'none' };
+ const isTouchable = firstToSelectId !== clientId;
const isMediaTextChildSelected = blockType.name === 'core/media-text' && getBlockRootClientId( selectedBlockClientId ) === clientId;
return {
diff --git a/packages/block-library/src/heading/edit.native.js b/packages/block-library/src/heading/edit.native.js
index 29983197843ac1..ac8a0e755278cd 100644
--- a/packages/block-library/src/heading/edit.native.js
+++ b/packages/block-library/src/heading/edit.native.js
@@ -23,7 +23,6 @@ const HeadingEdit = ( {
onReplace,
setAttributes,
style,
- isInnerBlock,
} ) => (
@@ -58,7 +57,6 @@ const HeadingEdit = ( {
onReplace={ onReplace }
onRemove={ () => onReplace( [] ) }
placeholder={ attributes.placeholder || __( 'Write heading…' ) }
- isInnerBlock={ isInnerBlock }
/>
);
diff --git a/packages/block-library/src/paragraph/edit.native.js b/packages/block-library/src/paragraph/edit.native.js
index ac3862ab5ac1c1..6dbcaf8a1459dd 100644
--- a/packages/block-library/src/paragraph/edit.native.js
+++ b/packages/block-library/src/paragraph/edit.native.js
@@ -78,7 +78,6 @@ class ParagraphEdit extends Component {
onReplace={ onReplace }
onRemove={ onReplace ? () => onReplace( [] ) : undefined }
placeholder={ placeholder || __( 'Start writing…' ) }
- isInnerBlock={ this.props.isInnerBlock }
/>
);
diff --git a/packages/rich-text/src/component/index.native.js b/packages/rich-text/src/component/index.native.js
index 96f057510dda4c..0af666459641e5 100644
--- a/packages/rich-text/src/component/index.native.js
+++ b/packages/rich-text/src/component/index.native.js
@@ -75,7 +75,6 @@ export class RichText extends Component {
this.formatToValue.bind( this ),
{ maxSize: 1 }
);
- this.makeActive = this.makeActive.bind( this );
// This prevents a bug in Aztec which triggers onSelectionChange twice on format change
this.onSelectionChange = this.onSelectionChange.bind( this );
@@ -87,7 +86,6 @@ export class RichText extends Component {
activeFormats: [],
selectedFormat: null,
height: 0,
- isActive: ! this.props.isInnerBlock,
};
this.needsSelectionUpdate = false;
this.savedContent = '';
@@ -543,7 +541,6 @@ export class RichText extends Component {
// to determine if we should focus the RichText.
if ( this.props.blockIsSelected && ! this.props.__unstableMobileNoFocusOnMount ) {
this._editor.focus();
- this.makeActive( true );
this.onSelectionChange( this.props.selectionStart || 0, this.props.selectionEnd || 0 );
}
}
@@ -551,7 +548,6 @@ export class RichText extends Component {
componentWillUnmount() {
if ( this._editor.isFocused() && this.props.shouldBlurOnUnmount ) {
this._editor.blur();
- this.makeActive( false );
}
}
@@ -570,22 +566,14 @@ export class RichText extends Component {
if ( isSelected && ! prevIsSelected ) {
this._editor.focus();
- this.makeActive( true );
// Update selection props explicitly when component is selected as Aztec won't call onSelectionChange
// if its internal value hasn't change. When created, default value is 0, 0
this.onSelectionChange( this.props.selectionStart || 0, this.props.selectionEnd || 0 );
} else if ( ! isSelected && prevIsSelected ) {
this._editor.blur();
- if ( this.props.isInnerBlock ) {
- this.makeActive( false );
- }
}
}
- makeActive( isActive ) {
- this.setState( { isActive } );
- }
-
willTrimSpaces( html ) {
// regex for detecting spaces around block element html tags
const blockHtmlElements = '(div|br|blockquote|ul|ol|li|p|pre|h1|h2|h3|h4|h5|h6|iframe|hr)';
@@ -624,7 +612,6 @@ export class RichText extends Component {
__unstableIsSelected: isSelected,
children,
getStylesFromColorScheme,
- blockIsSelected,
} = this.props;
const record = this.getRecord();
@@ -693,8 +680,6 @@ export class RichText extends Component {
this.firedAfterTextChanged = false;
}
- const lockOnFocus = blockIsSelected || this.state.isActive ? {} : { pointerEvents: 'none' };
-
return (
{ children && children( {
@@ -739,7 +724,6 @@ export class RichText extends Component {
disableEditingMenu={ this.props.disableEditingMenu }
isMultiline={ this.isMultiline }
textAlign={ this.props.textAlign }
- { ...lockOnFocus }
/>
{ isSelected && }
From 65b84006a1dab1ceb64945a432ccbb11182d78a0 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Fri, 15 Nov 2019 11:14:27 +0100
Subject: [PATCH 043/183] clean passing props after seletion loop issue fix
---
.../block-editor/src/components/caption/index.native.js | 1 -
.../src/components/media-placeholder/index.native.js | 4 +---
packages/block-library/src/image/edit.native.js | 7 +------
.../block-library/src/media-text/media-container.native.js | 1 -
packages/block-library/src/video/edit.native.js | 1 -
5 files changed, 2 insertions(+), 12 deletions(-)
diff --git a/packages/block-editor/src/components/caption/index.native.js b/packages/block-editor/src/components/caption/index.native.js
index c093c44c49d593..68e965524c8b87 100644
--- a/packages/block-editor/src/components/caption/index.native.js
+++ b/packages/block-editor/src/components/caption/index.native.js
@@ -30,7 +30,6 @@ const Caption = ( { accessible, accessibilityLabel, onBlur, onChange, onFocus, i
underlineColorAndroid="transparent"
textAlign={ 'center' }
tagName={ '' }
- isParentSelected={ shouldDisplay }
/>
);
diff --git a/packages/block-editor/src/components/media-placeholder/index.native.js b/packages/block-editor/src/components/media-placeholder/index.native.js
index 96812b702e00b1..3680401362a4cb 100644
--- a/packages/block-editor/src/components/media-placeholder/index.native.js
+++ b/packages/block-editor/src/components/media-placeholder/index.native.js
@@ -117,9 +117,7 @@ function MediaPlaceholder( props ) {
accessibilityHint={ accessibilityHint }
onPress={ ( event ) => {
props.onFocus( event );
- if ( props.isBlockSelected ) {
- open();
- }
+ open();
} }>
);
diff --git a/packages/block-library/src/media-text/media-container.native.js b/packages/block-library/src/media-text/media-container.native.js
index 833ff148f312e5..fea6a9671965c4 100644
--- a/packages/block-library/src/media-text/media-container.native.js
+++ b/packages/block-library/src/media-text/media-container.native.js
@@ -255,7 +255,6 @@ class MediaContainer extends Component {
allowedTypes={ ALLOWED_MEDIA_TYPES }
onFocus={ this.props.onFocus }
onError={ this.onUploadError }
- isBlockSelected={ this.props.isSelected }
/>
);
}
diff --git a/packages/block-library/src/video/edit.native.js b/packages/block-library/src/video/edit.native.js
index 976ad8202aa6ea..bec2dfa7143e86 100644
--- a/packages/block-library/src/video/edit.native.js
+++ b/packages/block-library/src/video/edit.native.js
@@ -184,7 +184,6 @@ class VideoEdit extends React.Component {
onSelect={ this.onSelectMediaUploadOption }
icon={ this.getIcon( false, true ) }
onFocus={ this.props.onFocus }
- isBlockSelected={ this.props.isSelected }
/>
);
From c0725551994314f0b87d737211421ff1ec4fc758 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Fri, 15 Nov 2019 16:22:04 +0100
Subject: [PATCH 044/183] replace block specific text
---
.../block-editor/src/components/block-list/index.native.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/index.native.js b/packages/block-editor/src/components/block-list/index.native.js
index 8fa25a9b6b7455..10836d145dc031 100644
--- a/packages/block-editor/src/components/block-list/index.native.js
+++ b/packages/block-editor/src/components/block-list/index.native.js
@@ -180,7 +180,7 @@ export default compose( [
const insertionPoint = getBlockInsertionPoint();
const blockInsertionPointIsVisible = isBlockInsertionPointVisible();
const selectedBlock = getSelectedBlock();
- const isSelectedGroup = selectedBlock && ( selectedBlock.name === 'core/group' || selectedBlock.name === 'core/media-text' );
+ const hasInnerBlocks = selectedBlock && selectedBlock.innerBlocks.length;
const shouldShowInsertionPointBefore = ( clientId ) => {
return (
blockInsertionPointIsVisible &&
@@ -210,7 +210,7 @@ export default compose( [
const shouldShowBlockAtIndex = ( index ) => {
const shouldHideBlockAtIndex = (
- ! isSelectedGroup && blockInsertionPointIsVisible &&
+ ! hasInnerBlocks && blockInsertionPointIsVisible &&
// if `index` === `insertionPoint.index`, then block is replaceable
index === insertionPoint.index &&
// only hide selected block
@@ -219,7 +219,7 @@ export default compose( [
return ! shouldHideBlockAtIndex;
};
- const hasFullBorder = !! getBlockRootClientId( selectedBlockClientId ) || isSelectedGroup;
+ const hasFullBorder = !! getBlockRootClientId( selectedBlockClientId ) || hasInnerBlocks;
return {
blockClientIds,
From f06f6affd83f3da8b90a687dc36c457380f8a907 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Fri, 15 Nov 2019 16:42:40 +0100
Subject: [PATCH 045/183] replace block specific style
---
.../src/components/block-list/block.native.js | 2 +-
.../src/components/block-list/block.native.scss | 11 -----------
2 files changed, 1 insertion(+), 12 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 4646a6ec2ad798..3629ae1f123327 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -151,7 +151,7 @@ class BlockListBlock extends Component {
const defaultStyle = [ isDashed ? getStylesFromColorScheme( styles.blockHolderDashedBordered, styles.blockHolderDashedBorderedDark ) : styles.blockContainer ];
if ( isMediaTextParent ) {
- return [ ...defaultStyle, styles.blockContainerMediaTextInner ];
+ return [ ...defaultStyle, styles.horizontalMarginNone, styles.horizontalPaddingNone ];
}
if ( isNestedInnerBlock ) {
diff --git a/packages/block-editor/src/components/block-list/block.native.scss b/packages/block-editor/src/components/block-list/block.native.scss
index 8cff000ac59ba6..381fde3b6a344e 100644
--- a/packages/block-editor/src/components/block-list/block.native.scss
+++ b/packages/block-editor/src/components/block-list/block.native.scss
@@ -18,17 +18,6 @@
padding-bottom: 12px;
}
-.blockContainerMediaTextInner {
- margin-left: 0;
- margin-right: 0;
- padding-left: 0;
- padding-right: 0;
- padding-top: 6px;
- padding-bottom: 6px;
- margin-bottom: 6px;
- margin-top: 0;
-}
-
.nestedBlockContainerInner {
margin-left: 0;
margin-right: 0;
From f2be82dfd806ecec5dd2f1d017ba94aa5797db53 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Mon, 18 Nov 2019 07:58:54 +0100
Subject: [PATCH 046/183] fix getParent selectors
---
packages/block-editor/src/store/selectors.js | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/packages/block-editor/src/store/selectors.js b/packages/block-editor/src/store/selectors.js
index c7b277382508b3..c2f88d656c7f2d 100644
--- a/packages/block-editor/src/store/selectors.js
+++ b/packages/block-editor/src/store/selectors.js
@@ -431,11 +431,12 @@ export function getBlockRootClientId( state, clientId ) {
*
* @return {Array} ClientIDs of the parent blocks.
*/
-export const getBlockParents = ( state, clientId, getDependants = true, includeClientId = false ) => {
- return getDependants ?
- createSelector( getTree( state, clientId, true ), ( dependantState ) => [ dependantState.blocks.parents ] ) :
- getTree( state, clientId, false, includeClientId );
-};
+export const getBlockParents = createSelector(
+ ( state, clientId ) => getTree( state, clientId, true ),
+ ( state ) => [
+ state.blocks.parents,
+ ]
+);
/**
* Given a block client ID, returns the root of the hierarchy from which the block is nested, return the block itself for root level blocks.
@@ -486,7 +487,7 @@ export function getTree( state, clientId, reverse = true, includeClientId = fals
*/
export function getFirstToSelectBlock( state, clientId ) {
const selectedId = getSelectedBlockClientId( state );
- const clientTree = getBlockParents( state, clientId, false, true );
+ const clientTree = getTree( state, clientId, false, true );
const rootParent = clientTree[ clientTree.length - 1 ];
let index = 0;
@@ -504,7 +505,7 @@ export function getFirstToSelectBlock( state, clientId ) {
return rootParent;
}
- const selectedTree = getBlockParents( state, selectedId, false, true );
+ const selectedTree = getTree( state, selectedId, false, true );
do {
const commonParentIndex = clientTree.indexOf( selectedTree[ index ] );
From e47908deff630574f60ea4d69cd1701458f1574a Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Mon, 18 Nov 2019 09:11:59 +0100
Subject: [PATCH 047/183] adjust selection logic
---
.../block-editor/src/components/block-list/block.native.js | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 3629ae1f123327..eee10eaa9da40e 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -258,6 +258,7 @@ export default compose( [
getBlock,
getBlockRootClientId,
getFirstToSelectBlock,
+ getBlockParents,
} = select( 'core/block-editor' );
const order = getBlockIndex( clientId, rootClientId );
const isSelected = isBlockSelected( clientId );
@@ -294,8 +295,9 @@ export default compose( [
const isNestedInnerBlock = ! isDashed && selectedBlockClientId === getBlockRootClientId( firstToSelectId );
const hasInnerBlock = blockType.name === 'core/group' || blockType.name === 'core/media-text';
const isParentSelected = parentId === selectedBlockClientId;
- const isTouchable = firstToSelectId !== clientId;
const isMediaTextChildSelected = blockType.name === 'core/media-text' && getBlockRootClientId( selectedBlockClientId ) === clientId;
+ const isDescendantSelected = selectedBlockClientId && getBlockParents( selectedBlockClientId ).includes( clientId );
+ const isTouchable = isSelected || isDescendantSelected || selectedBlockClientId === parentId || parentId === '';
return {
icon,
From 2674522f31a0940bc64d646880b96d001944028c Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Mon, 18 Nov 2019 10:03:46 +0100
Subject: [PATCH 048/183] fix show appender in group block
---
.../src/components/block-list/index.native.js | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/index.native.js b/packages/block-editor/src/components/block-list/index.native.js
index c291cec2215d39..deb7cf5e7b0e4c 100644
--- a/packages/block-editor/src/components/block-list/index.native.js
+++ b/packages/block-editor/src/components/block-list/index.native.js
@@ -63,13 +63,12 @@ export class BlockList extends Component {
const willShowInsertionPoint = shouldShowInsertionPointBefore(); // call without the client_id argument since this is the appender
return (
- { willShowInsertionPoint ?
- this.renderAddBlockSeparator() : // show the new-block indicator when we're inserting a block or
-
- }
+ { /* show the new-block indicator when we're inserting a block */ }
+ { willShowInsertionPoint && this.renderAddBlockSeparator() }
+
);
}
From 84d8dadd8c351aa862c59ec87bd072b187779015 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Mon, 18 Nov 2019 10:56:36 +0100
Subject: [PATCH 049/183] fix hasInnerBlocks
---
packages/block-editor/src/components/block-list/index.native.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/block-editor/src/components/block-list/index.native.js b/packages/block-editor/src/components/block-list/index.native.js
index 10836d145dc031..faa18991a0dc59 100644
--- a/packages/block-editor/src/components/block-list/index.native.js
+++ b/packages/block-editor/src/components/block-list/index.native.js
@@ -180,7 +180,7 @@ export default compose( [
const insertionPoint = getBlockInsertionPoint();
const blockInsertionPointIsVisible = isBlockInsertionPointVisible();
const selectedBlock = getSelectedBlock();
- const hasInnerBlocks = selectedBlock && selectedBlock.innerBlocks.length;
+ const hasInnerBlocks = selectedBlock && selectedBlock.innerBlocks.length !== 0;
const shouldShowInsertionPointBefore = ( clientId ) => {
return (
blockInsertionPointIsVisible &&
From 014e3a05fdfe9db5359cc9bf8cecb5cf8b6ab97d Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Tue, 19 Nov 2019 12:56:34 +0100
Subject: [PATCH 050/183] refactor selectors
---
.../src/components/block-list/block.native.js | 4 +-
packages/block-editor/src/store/selectors.js | 41 +++++++------------
.../src/components/post-title/index.native.js | 4 +-
3 files changed, 18 insertions(+), 31 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index eee10eaa9da40e..4c34e6ecf7ffd3 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -257,7 +257,7 @@ export default compose( [
getSelectedBlockClientId,
getBlock,
getBlockRootClientId,
- getFirstToSelectBlock,
+ getLowestCommonAncestorWithSelectedBlock,
getBlockParents,
} = select( 'core/block-editor' );
const order = getBlockIndex( clientId, rootClientId );
@@ -282,7 +282,7 @@ export default compose( [
const showFloatingToolbar = isSelected && hasRootInnerBlocks;
- const firstToSelectId = getFirstToSelectBlock( clientId );
+ const firstToSelectId = getLowestCommonAncestorWithSelectedBlock( clientId );
const selectedBlockClientId = getSelectedBlockClientId();
const isRootSiblingsSelected = getBlockRootClientId( selectedBlockClientId ) === '';
diff --git a/packages/block-editor/src/store/selectors.js b/packages/block-editor/src/store/selectors.js
index c2f88d656c7f2d..33216d5215ff38 100644
--- a/packages/block-editor/src/store/selectors.js
+++ b/packages/block-editor/src/store/selectors.js
@@ -426,13 +426,21 @@ export function getBlockRootClientId( state, clientId ) {
*
* @param {Object} state Editor state.
* @param {string} clientId Block from which to find root client ID.
- * @param {boolean} getDependants Apply createSelector function to call getDependants.
- * @param {boolean} includeClientId Include client ID in return array.
+ * @param {boolean} ascending Get parent hierarchy in (top-most hierarchy first).
*
* @return {Array} ClientIDs of the parent blocks.
*/
export const getBlockParents = createSelector(
- ( state, clientId ) => getTree( state, clientId, true ),
+ ( state, clientId, ascending = false ) => {
+ const parents = [];
+ let current = clientId;
+ while ( !! state.blocks.parents[ current ] ) {
+ current = state.blocks.parents[ current ];
+ parents.push( current );
+ }
+
+ return ascending ? parents : parents.reverse();
+ },
( state ) => [
state.blocks.parents,
]
@@ -456,27 +464,6 @@ export function getBlockHierarchyRootClientId( state, clientId ) {
return parent;
}
-/**
- * Given a block client ID, returns the hierarchy tree of client ID.
- *
- * @param {Object} state Editor state.
- * @param {string} clientId Block from which tree will be created.
- * @param {boolean} reverse Get parent hierarchy in reverse order (top-most hierarchy first).
- * @param {boolean} includeClientId Include client ID in return array.
- *
- * @return {Array} Hierarchy tree of client ID.
- */
-export function getTree( state, clientId, reverse = true, includeClientId = false ) {
- const parents = includeClientId ? [ clientId ] : [];
- let current = clientId;
- while ( !! state.blocks.parents[ current ] ) {
- current = state.blocks.parents[ current ];
- parents.push( current );
- }
-
- return reverse ? parents.reverse() : parents;
-}
-
/**
* Given a block client ID, returns the next element of the hierarchy from which the block is nested which should be selected onFocus, return the block itself for root level blocks.
*
@@ -485,9 +472,9 @@ export function getTree( state, clientId, reverse = true, includeClientId = fals
*
* @return {string} First to select client ID
*/
-export function getFirstToSelectBlock( state, clientId ) {
+export function getLowestCommonAncestorWithSelectedBlock( state, clientId ) {
const selectedId = getSelectedBlockClientId( state );
- const clientTree = getTree( state, clientId, false, true );
+ const clientTree = [ clientId, ...getBlockParents( state, clientId, true ) ];
const rootParent = clientTree[ clientTree.length - 1 ];
let index = 0;
@@ -505,7 +492,7 @@ export function getFirstToSelectBlock( state, clientId ) {
return rootParent;
}
- const selectedTree = getTree( state, selectedId, false, true );
+ const selectedTree = [ selectedId, ...getBlockParents( state, selectedId, true ) ];
do {
const commonParentIndex = clientTree.indexOf( selectedTree[ index ] );
diff --git a/packages/editor/src/components/post-title/index.native.js b/packages/editor/src/components/post-title/index.native.js
index 6b8192a4babcbc..c2ff64ee41cb46 100644
--- a/packages/editor/src/components/post-title/index.native.js
+++ b/packages/editor/src/components/post-title/index.native.js
@@ -105,12 +105,12 @@ export default compose(
isPostTitleSelected,
} = select( 'core/editor' );
- const { getSelectedBlockClientId, getBlockRootClientId, getFirstToSelectBlock } = select( 'core/block-editor' );
+ const { getSelectedBlockClientId, getBlockRootClientId, getLowestCommonAncestorWithSelectedBlock } = select( 'core/block-editor' );
const clientId = getSelectedBlockClientId();
const isAnyBlockSelected = !! clientId;
const parentId = getBlockRootClientId( clientId );
- const firstToSelect = getFirstToSelectBlock( clientId );
+ const firstToSelect = getLowestCommonAncestorWithSelectedBlock( clientId );
const isInnerBlock = parentId && firstToSelect !== parentId;
const isDimmed = isAnyBlockSelected && isInnerBlock;
From 3b94490dc459908be3f3c1940bfa96e6443fc946 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Fri, 22 Nov 2019 15:16:04 +0100
Subject: [PATCH 051/183] refactor navigate-down logic
---
.../developers/data/data-core-block-editor.md | 44 ++---
packages/base-styles/_variables.scss | 10 +
.../src/components/block-list/block.native.js | 182 ++++++++----------
.../components/block-list/block.native.scss | 122 ++++++------
.../src/components/block-list/index.native.js | 12 +-
.../components/block-list/style.native.scss | 37 ----
.../button-block-appender/styles.native.scss | 4 +-
packages/block-editor/src/store/selectors.js | 45 ++---
.../block-library/src/group/edit.native.js | 9 -
.../src/group/editor.native.scss | 18 +-
.../src/media-text/edit.native.js | 53 ++---
.../src/media-text/media-container.js | 3 +-
.../visual-editor/style.native.scss | 4 +-
.../src/components/post-title/index.native.js | 15 +-
14 files changed, 213 insertions(+), 345 deletions(-)
diff --git a/docs/designers-developers/developers/data/data-core-block-editor.md b/docs/designers-developers/developers/data/data-core-block-editor.md
index 2203bd0e0bed37..215477ddadb377 100644
--- a/docs/designers-developers/developers/data/data-core-block-editor.md
+++ b/docs/designers-developers/developers/data/data-core-block-editor.md
@@ -197,8 +197,7 @@ _Parameters_
- _state_ `Object`: Editor state.
- _clientId_ `string`: Block from which to find root client ID.
-- _getDependants_ `boolean`: Apply createSelector function to call getDependants.
-- _includeClientId_ `boolean`: Include client ID in return array.
+- _ascending_ `boolean`: Get parent hierarchy in top-most hierarchy first (false) or reversed (true).
_Returns_
@@ -318,19 +317,6 @@ _Returns_
- `?string`: First block client ID in the multi-selection set.
-# **getFirstToSelectBlock**
-
-Given a block client ID, returns the next element of the hierarchy from which the block is nested which should be selected onFocus, return the block itself for root level blocks.
-
-_Parameters_
-
-- _state_ `Object`: Editor state.
-- _clientId_ `string`: Block from which to find first to select client ID.
-
-_Returns_
-
-- `string`: First to select client ID
-
# **getGlobalBlockCount**
Returns the total number of blocks, or the total number of blocks with a specific name in a post.
@@ -405,6 +391,19 @@ _Returns_
- `?string`: Last block client ID in the multi-selection set.
+# **getLowestCommonAncestorWithSelectedBlock**
+
+Given a block client ID, returns the common ancestor with selected client ID.
+
+_Parameters_
+
+- _state_ `Object`: Editor state.
+- _clientId_ `string`: Block from which to find common ancestor client ID.
+
+_Returns_
+
+- `string`: Common ancestor client ID or undefined
+
# **getMultiSelectedBlockClientIds**
Returns the current multi-selection set of block client IDs, or an empty
@@ -625,21 +624,6 @@ _Returns_
- `?string`: Block Template Lock
-# **getTree**
-
-Given a block client ID, returns the hierarchy tree of client ID.
-
-_Parameters_
-
-- _state_ `Object`: Editor state.
-- _clientId_ `string`: Block from which tree will be created.
-- _reverse_ `boolean`: Get parent hierarchy in reverse order (top-most hierarchy first).
-- _includeClientId_ `boolean`: Include client ID in return array.
-
-_Returns_
-
-- `Array`: Hierarchy tree of client ID.
-
# **hasInserterItems**
Determines whether there are items to show in the inserter.
diff --git a/packages/base-styles/_variables.scss b/packages/base-styles/_variables.scss
index 75234bd5fb7795..543b1896b94537 100644
--- a/packages/base-styles/_variables.scss
+++ b/packages/base-styles/_variables.scss
@@ -63,6 +63,16 @@ $block-container-side-padding: $block-side-ui-width + $block-padding + 2 * $bloc
$block-bg-padding--v: $block-padding + $block-spacing + $block-side-ui-clearance; // padding for Blocks with a background color (eg: paragraph or group)
$block-bg-padding--h: $block-side-ui-width + $block-side-ui-clearance; // padding for Blocks with a background color (eg: paragraph or group)
+$block-edge-to-content: 16px;
+$block-selected-margin: 3px;
+$block-selected-border-width: 1px;
+$block-selected-padding: 0;
+$block-selected-child-margin: 5px;
+$block-selected-child-border-width: 1px;
+$block-selected-child-padding: 0;
+$block-selected-to-content: $block-edge-to-content - $block-selected-margin - $block-selected-border-width;
+$block-selected-child-to-content: $block-selected-to-content - $block-selected-child-margin - $block-selected-child-border-width;
+
// Buttons & UI Widgets
$radius-round-rectangle: 4px;
$radius-round: 50%;
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 4c34e6ecf7ffd3..6945bbc110e809 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -34,10 +34,6 @@ class BlockListBlock extends Component {
this.insertBlocksAfter = this.insertBlocksAfter.bind( this );
this.onFocus = this.onFocus.bind( this );
-
- this.state = {
- isFullyBordered: false,
- };
}
onFocus() {
@@ -61,7 +57,6 @@ class BlockListBlock extends Component {
);
}
@@ -113,84 +102,89 @@ class BlockListBlock extends Component {
return blockName;
}
- applySelectedStyle() {
+ applySelectedBlockStyle() {
const {
- isInnerBlock,
- isNestedInnerBlock,
- hasInnerBlock,
+ hasChildren,
+ getStylesFromColorScheme,
+ isSmallScreen,
+ selectionIsNested,
} = this.props;
- if ( isNestedInnerBlock || hasInnerBlock ) {
- return styles.nestedFocusedBlock;
+ const fullSolidBorderStyle = {
+ ...styles.fullSolidBordered,
+ ...getStylesFromColorScheme( styles.solidBorderColor, styles.solidBorderColorDark ),
+ };
+
+ if ( hasChildren ) {
+ return { ...styles.selectedParent, ...fullSolidBorderStyle };
}
- if ( isInnerBlock ) {
- return styles.innerBlockContainerFocused;
+ if ( isSmallScreen && ! selectionIsNested ) {
+ return {
+ ...styles.selectedRootLeaf,
+ ...styles.semiSolidBordered,
+ ...{ borderColor: fullSolidBorderStyle.borderColor },
+ };
}
- return styles.blockContainerFocused;
+ return { ...styles.selectedLeaf, ...fullSolidBorderStyle };
}
- applyUnSelectedStyle() {
+ applyUnSelectedBlockStyle() {
const {
- isDashed,
- isDimmed,
- isNestedInnerBlock,
- isInnerBlock,
- isChildOfSameRootBlock,
- hasInnerBlock,
- parentId,
- isMediaTextParent,
+ hasChildren,
+ isParentSelected,
+ isAncestorSelected,
+ hasParent,
getStylesFromColorScheme,
} = this.props;
- if ( ! isDashed && isInnerBlock && ! isChildOfSameRootBlock ) {
- return styles.blockContainerInner;
+ if ( ! hasParent ) {
+ return hasChildren ? styles.neutral : styles.full;
}
- const defaultStyle = [ isDashed ? getStylesFromColorScheme( styles.blockHolderDashedBordered, styles.blockHolderDashedBorderedDark ) : styles.blockContainer ];
+ if ( isParentSelected ) {
+ const dashedBorderStyle = {
+ ...styles.dashedBordered,
+ ...getStylesFromColorScheme( styles.dashedBorderColor, styles.dashedBorderColorDark ),
+ };
- if ( isMediaTextParent ) {
- return [ ...defaultStyle, styles.horizontalMarginNone, styles.horizontalPaddingNone ];
+ return hasChildren ?
+ { ...styles.childOfSelected, ...dashedBorderStyle } :
+ { ...styles.childOfSelectedLeaf, ...dashedBorderStyle };
}
- if ( isNestedInnerBlock ) {
- if ( ! isDimmed || isDashed ) {
- return [ ...defaultStyle, styles.blockContainerInner ];
- }
- return [ ...defaultStyle, styles.nestedBlockContainerInner ];
+ if ( isAncestorSelected ) {
+ return styles.descendantOfSelectedLeaf;
}
- if ( hasInnerBlock && ( ! parentId || isChildOfSameRootBlock ) ) {
- return [ ...defaultStyle, styles.horizontalMarginNone ];
- }
+ return hasChildren ? styles.neutral : styles.full;
+ }
+
+ applyBlockStyle() {
+ const {
+ isSelected,
+ isDimmed,
+ } = this.props;
- return defaultStyle;
+ return [
+ isSelected ? this.applySelectedBlockStyle() : this.applyUnSelectedBlockStyle(),
+ isDimmed && styles.dimmed,
+ ];
}
render() {
const {
- borderStyle,
clientId,
- focusedBorderColor,
icon,
isSelected,
isValid,
- showTitle,
title,
showFloatingToolbar,
parentId,
- isDashed,
- isDimmed,
- isInnerBlock,
- isNestedInnerBlock,
- hasInnerBlock,
- isMediaTextParent,
isTouchable,
} = this.props;
- const borderColor = isSelected ? focusedBorderColor : 'transparent';
-
const accessibilityLabel = this.getAccessibilityLabel();
return (
@@ -213,31 +207,15 @@ class BlockListBlock extends Component {
accessible={ ! isSelected }
accessibilityRole={ 'button' }
>
-
- { showTitle && this.renderBlockTitle() }
-
- { isValid && this.getBlockForType() }
- { ! isValid &&
+
+ { isValid && this.getBlockForType() }
+ { ! isValid &&
- }
-
+ }
{ isSelected && }
@@ -252,7 +230,6 @@ export default compose( [
getBlockIndex,
getBlocks,
isBlockSelected,
- __unstableGetBlockWithoutInnerBlocks,
getBlockHierarchyRootClientId,
getSelectedBlockClientId,
getBlock,
@@ -263,18 +240,15 @@ export default compose( [
const order = getBlockIndex( clientId, rootClientId );
const isSelected = isBlockSelected( clientId );
const isLastBlock = order === getBlocks().length - 1;
- const block = __unstableGetBlockWithoutInnerBlocks( clientId );
+ const block = getBlock( clientId );
const { name, attributes, isValid } = block || {};
const blockType = getBlockType( name || 'core/missing' );
const title = blockType.title;
const icon = blockType.icon;
const getAccessibilityLabelExtra = blockType.__experimentalGetAccessibilityLabel;
- const parentId = getBlockRootClientId( clientId );
- const parentBlock = getBlock( parentId );
- const isGroupParent = parentBlock && parentBlock.name === 'core/group';
-
- const isMediaTextParent = parentBlock && parentBlock.name === 'core/media-text';
+ const parents = getBlockParents( clientId, true );
+ const parentId = parents[ 0 ] || '';
const rootBlockId = getBlockHierarchyRootClientId( clientId );
const rootBlock = getBlock( rootBlockId );
@@ -282,20 +256,20 @@ export default compose( [
const showFloatingToolbar = isSelected && hasRootInnerBlocks;
- const firstToSelectId = getLowestCommonAncestorWithSelectedBlock( clientId );
-
const selectedBlockClientId = getSelectedBlockClientId();
- const isRootSiblingsSelected = getBlockRootClientId( selectedBlockClientId ) === '';
- const isDashed = selectedBlockClientId === parentId;
- const isDimmed = ! isSelected && ! isRootSiblingsSelected && !! selectedBlockClientId && firstToSelectId === clientId && ! isDashed;
+ const commonAncestor = getLowestCommonAncestorWithSelectedBlock( clientId );
+ const clientTree = [ clientId, ...parents ];
+ const commonAncestorIndex = clientTree.indexOf( commonAncestor ) - 1;
+ const firstToSelectId = commonAncestor || selectedBlockClientId ? clientTree[ commonAncestorIndex ] : rootBlockId;
+
+ const hasChildren = block.innerBlocks.length !== 0;
+ const hasParent = !! parents[ 0 ];
+ const isParentSelected = selectedBlockClientId && selectedBlockClientId === parents[ 0 ];
+ const isAncestorSelected = selectedBlockClientId && parents.includes( selectedBlockClientId );
+ const selectionIsNested = !! getBlockRootClientId( selectedBlockClientId );
+ const isDimmed = ! isSelected && ! isAncestorSelected && firstToSelectId === clientId && selectionIsNested;
- const isInnerBlock = parentId && firstToSelectId !== parentId;
- const isChildOfSameRootBlock = rootBlockId === getBlockHierarchyRootClientId( selectedBlockClientId );
- const isNestedInnerBlock = ! isDashed && selectedBlockClientId === getBlockRootClientId( firstToSelectId );
- const hasInnerBlock = blockType.name === 'core/group' || blockType.name === 'core/media-text';
- const isParentSelected = parentId === selectedBlockClientId;
- const isMediaTextChildSelected = blockType.name === 'core/media-text' && getBlockRootClientId( selectedBlockClientId ) === clientId;
const isDescendantSelected = selectedBlockClientId && getBlockParents( selectedBlockClientId ).includes( clientId );
const isTouchable = isSelected || isDescendantSelected || selectedBlockClientId === parentId || parentId === '';
@@ -312,18 +286,14 @@ export default compose( [
getAccessibilityLabelExtra,
showFloatingToolbar,
parentId,
- isDashed,
- isDimmed,
- firstToSelectId,
- isInnerBlock,
- isChildOfSameRootBlock,
- isNestedInnerBlock,
- hasInnerBlock,
isParentSelected,
- isMediaTextParent,
- isGroupParent,
+ firstToSelectId,
+ hasChildren,
+ hasParent,
+ isAncestorSelected,
isTouchable,
- isMediaTextChildSelected,
+ isDimmed,
+ selectionIsNested,
};
} ),
withDispatch( ( dispatch, ownProps, { select } ) => {
diff --git a/packages/block-editor/src/components/block-list/block.native.scss b/packages/block-editor/src/components/block-list/block.native.scss
index 381fde3b6a344e..d42e9f2e1ba26f 100644
--- a/packages/block-editor/src/components/block-list/block.native.scss
+++ b/packages/block-editor/src/components/block-list/block.native.scss
@@ -2,102 +2,92 @@
flex: 1 1 auto;
}
-.blockContainer {
- margin-left: 16px;
- margin-right: 16px;
- padding-top: 12px;
- padding-bottom: 12px;
+.semiSolidBordered {
+ border-top-width: $block-selected-border-width;
+ border-bottom-width: $block-selected-border-width;
+ border-left-width: 0;
+ border-right-width: 0;
+ border-style: solid;
}
-.blockContainerInner {
- margin-left: 0;
- margin-right: 0;
- padding-left: 0;
- padding-right: 0;
- padding-top: 12px;
- padding-bottom: 12px;
+.fullSolidBordered {
+ border-width: $block-selected-border-width;
+ border-radius: 4px;
+ border-style: solid;
}
-.nestedBlockContainerInner {
- margin-left: 0;
- margin-right: 0;
- padding-top: 9px;
- padding-bottom: 9px;
+.dashedBordered {
+ border-width: $block-selected-child-border-width;
+ border-radius: 2px;
+ border-style: dashed;
}
-.blockContainerDimmed {
- opacity: 0.2;
+.solidBorderColor {
+ border-color: $blue-wordpress;
}
-.blockHolderDashedBordered {
- border-width: 1px;
- border-radius: 2px;
- border-style: dashed;
+.solidBorderColorDark {
+ border-color: $blue-30;
+}
+
+.dashedBorderColor {
border-color: $gray;
- padding: 5px;
- margin-right: 0;
- margin-left: 0;
- margin-bottom: 6px;
- margin-top: 6px;
}
-.blockHolderDashedBorderedDark {
+.dashedBorderColorDark {
border-color: $gray-70;
}
-.horizontalMarginNone {
- margin-left: 0;
- margin-right: 0;
+.dimmed {
+ opacity: 0.2;
}
-.verticalPaddingNone {
- padding-top: 0;
- padding-bottom: 0;
+.blockTitle {
+ background-color: $gray;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
}
-.horizontalPaddingNone {
- padding-left: 0;
- padding-right: 0;
+.neutral {
+ margin: 0;
+ border: 0;
+ padding: 0;
}
-.outlineBorderMargin {
- margin-left: 9px;
- margin-right: 9px;
+.full {
+ margin: $block-edge-to-content;
+ border: 0;
+ padding: 0;
}
-.dashedBorderMargin {
- margin-left: 5px;
- margin-right: 5px;
+.selectedLeaf {
+ margin: $block-selected-margin;
+ padding: $block-selected-to-content;
}
-.nestedFocusedBlock {
- margin-left: 0;
- margin-right: 0;
- padding-left: 0;
- padding-right: 0;
- padding-top: 12px;
- padding-bottom: 0; // will be flushed into inline toolbar height
+.selectedRootLeaf {
+ margin: 0;
+ padding: $block-edge-to-content;
}
-.innerBlockContainerFocused {
- padding-left: 12px;
- padding-right: 12px;
- padding-top: 12px;
- padding-bottom: 0; // will be flushed into inline toolbar height
+.selectedParent {
+ margin: $block-selected-margin;
+ padding: 0;
}
-.blockContainerFocused {
- padding-left: 16px;
- padding-right: 16px;
- padding-top: 12px;
- padding-bottom: 0; // will be flushed into inline toolbar height
+.childOfSelected {
+ margin: $block-selected-child-margin;
+ padding: 0;
}
-.blockTitle {
- background-color: $gray;
- padding-left: 8px;
- padding-top: 4px;
- padding-bottom: 4px;
+.childOfSelectedLeaf {
+ margin: $block-selected-child-margin;
+ padding: $block-selected-child-to-content;
+}
+
+.descendantOfSelectedLeaf {
+ margin: $block-selected-child-to-content;
}
.aztec_container {
diff --git a/packages/block-editor/src/components/block-list/index.native.js b/packages/block-editor/src/components/block-list/index.native.js
index faa18991a0dc59..80748396403ccd 100644
--- a/packages/block-editor/src/components/block-list/index.native.js
+++ b/packages/block-editor/src/components/block-list/index.native.js
@@ -41,10 +41,6 @@ export class BlockList extends Component {
this.props.insertBlock( newBlock, this.props.blockCount );
}
- blockHolderBorderStyle() {
- return this.props.isFullyBordered || this.props.hasFullBorder ? styles.blockHolderFullBordered : styles.blockHolderSemiBordered;
- }
-
onCaretVerticalPositionChange( targetId, caretY, previousCaretY ) {
KeyboardAwareFlatList.handleCaretVerticalPositionChange( this.scrollViewRef, targetId, caretY, previousCaretY );
}
@@ -118,7 +114,6 @@ export class BlockList extends Component {
}
renderItem( { item: clientId, index } ) {
- const blockHolderFocusedStyle = this.props.getStylesFromColorScheme( styles.blockHolderFocused, styles.blockHolderFocusedDark );
const { shouldShowBlockAtIndex, shouldShowInsertionPointBefore, shouldShowInsertionPointAfter } = this.props;
return (
@@ -130,8 +125,7 @@ export class BlockList extends Component {
clientId={ clientId }
rootClientId={ this.props.rootClientId }
onCaretVerticalPositionChange={ this.onCaretVerticalPositionChange }
- borderStyle={ this.blockHolderBorderStyle() }
- focusedBorderColor={ blockHolderFocusedStyle.borderColor }
+ isSmallScreen={ ! ReadableContentView.isContentMaxWidth() }
/> ) }
{ shouldShowInsertionPointAfter( clientId ) && this.renderAddBlockSeparator() }
@@ -172,7 +166,6 @@ export default compose( [
getBlockInsertionPoint,
isBlockInsertionPointVisible,
getSelectedBlock,
- getBlockRootClientId,
} = select( 'core/block-editor' );
const selectedBlockClientId = getSelectedBlockClientId();
@@ -219,8 +212,6 @@ export default compose( [
return ! shouldHideBlockAtIndex;
};
- const hasFullBorder = !! getBlockRootClientId( selectedBlockClientId ) || hasInnerBlocks;
-
return {
blockClientIds,
blockCount: getBlockCount( rootClientId ),
@@ -229,7 +220,6 @@ export default compose( [
shouldShowInsertionPointBefore,
shouldShowInsertionPointAfter,
selectedBlockClientId,
- hasFullBorder,
isRootList: rootClientId === undefined,
};
} ),
diff --git a/packages/block-editor/src/components/block-list/style.native.scss b/packages/block-editor/src/components/block-list/style.native.scss
index efc4ff4cde6a2e..adc601d45810e8 100644
--- a/packages/block-editor/src/components/block-list/style.native.scss
+++ b/packages/block-editor/src/components/block-list/style.native.scss
@@ -4,13 +4,6 @@
background-color: #fff;
}
-.list {
- flex: 1;
- padding-left: 0;
- padding-right: 0;
- margin: 0;
-}
-
.switch {
flex-direction: row;
justify-content: flex-start;
@@ -49,36 +42,6 @@
flex-direction: row;
}
-.blockHolderSemiBordered {
- border-top-width: 1px;
- border-bottom-width: 1px;
- border-left-width: 0;
- border-right-width: 0;
-}
-
-.blockHolderFullBordered {
- border-top-width: 1px;
- border-bottom-width: 1px;
- border-left-width: 1px;
- border-right-width: 1px;
- border-radius: 4px;
-}
-
-.blockContainerFocused {
- padding-left: 16;
- padding-right: 16;
- padding-top: 12;
- padding-bottom: 0; // will be flushed into inline toolbar height
-}
-
-.blockHolderFocused {
- border-color: $blue-wordpress;
-}
-
-.blockHolderFocusedDark {
- border-color: $blue-30;
-}
-
.blockListFooter {
height: 80px;
}
diff --git a/packages/block-editor/src/components/button-block-appender/styles.native.scss b/packages/block-editor/src/components/button-block-appender/styles.native.scss
index db3aac95d99a8e..05b8adb13c549c 100644
--- a/packages/block-editor/src/components/button-block-appender/styles.native.scss
+++ b/packages/block-editor/src/components/button-block-appender/styles.native.scss
@@ -2,8 +2,8 @@
align-items: center;
justify-content: center;
padding: 12px;
- margin-left: 9px;
- margin-right: 9px;
+ margin-left: 4px;
+ margin-right: 4px;
background-color: $white;
border: $border-width solid $light-gray-500;
border-radius: 4px;
diff --git a/packages/block-editor/src/store/selectors.js b/packages/block-editor/src/store/selectors.js
index 33216d5215ff38..99fd8d6cd9be69 100644
--- a/packages/block-editor/src/store/selectors.js
+++ b/packages/block-editor/src/store/selectors.js
@@ -426,7 +426,7 @@ export function getBlockRootClientId( state, clientId ) {
*
* @param {Object} state Editor state.
* @param {string} clientId Block from which to find root client ID.
- * @param {boolean} ascending Get parent hierarchy in (top-most hierarchy first).
+ * @param {boolean} ascending Get parent hierarchy in top-most hierarchy first (false) or reversed (true).
*
* @return {Array} ClientIDs of the parent blocks.
*/
@@ -465,45 +465,30 @@ export function getBlockHierarchyRootClientId( state, clientId ) {
}
/**
- * Given a block client ID, returns the next element of the hierarchy from which the block is nested which should be selected onFocus, return the block itself for root level blocks.
+ * Given a block client ID, returns the common ancestor with selected client ID.
*
* @param {Object} state Editor state.
- * @param {string} clientId Block from which to find first to select client ID.
+ * @param {string} clientId Block from which to find common ancestor client ID.
*
- * @return {string} First to select client ID
+ * @return {string} Common ancestor client ID or undefined
*/
export function getLowestCommonAncestorWithSelectedBlock( state, clientId ) {
const selectedId = getSelectedBlockClientId( state );
- const clientTree = [ clientId, ...getBlockParents( state, clientId, true ) ];
- const rootParent = clientTree[ clientTree.length - 1 ];
+ const clientParents = [ ...getBlockParents( state, clientId ), clientId ];
+ const selectedParents = [ ...getBlockParents( state, selectedId ), selectedId ];
- let index = 0;
- let commonParentFirstChild;
- let hasCommonParent = false;
+ let lowestCommonAncestor;
- if ( ! selectedId ) {
- return rootParent;
- }
-
- const selectedRoot = getBlockHierarchyRootClientId( state, selectedId );
- const clientRoot = getBlockHierarchyRootClientId( state, clientId );
-
- if ( selectedRoot !== clientRoot ) {
- return rootParent;
- }
-
- const selectedTree = [ selectedId, ...getBlockParents( state, selectedId, true ) ];
-
- do {
- const commonParentIndex = clientTree.indexOf( selectedTree[ index ] );
- hasCommonParent = commonParentIndex >= 0;
- if ( hasCommonParent ) {
- commonParentFirstChild = clientTree[ commonParentIndex - 1 ];
+ const maxDepth = Math.min( clientParents.length, selectedParents.length );
+ for ( let index = 0; index < maxDepth; index++ ) {
+ if ( clientParents[ index ] === selectedParents[ index ] ) {
+ lowestCommonAncestor = clientParents[ index ];
+ } else {
+ break;
}
- index++;
- } while ( index < selectedTree.length && ! hasCommonParent );
+ }
- return commonParentFirstChild;
+ return lowestCommonAncestor;
}
/**
diff --git a/packages/block-library/src/group/edit.native.js b/packages/block-library/src/group/edit.native.js
index 2b8b37857e72ca..3fa539252d60ac 100644
--- a/packages/block-library/src/group/edit.native.js
+++ b/packages/block-library/src/group/edit.native.js
@@ -22,20 +22,11 @@ function GroupEdit( {
hasInnerBlocks,
isSelected,
getStylesFromColorScheme,
- isInnerBlock,
- isDashed,
- isChildOfSameRootBlook,
- isParentSelected,
- isGroupParent,
} ) {
if ( ! isSelected && ! hasInnerBlocks ) {
return (
);
}
diff --git a/packages/block-library/src/group/editor.native.scss b/packages/block-library/src/group/editor.native.scss
index b93b8e997a024a..a9bd31ed59e63d 100644
--- a/packages/block-library/src/group/editor.native.scss
+++ b/packages/block-library/src/group/editor.native.scss
@@ -1,27 +1,13 @@
.groupPlaceholder {
padding: 12px;
margin: 16px;
+ margin-left: 2px;
+ margin-right: 2px;
background-color: $white;
border: $border-width dashed $gray;
border-radius: 4px;
}
-.groupPlaceholderInner {
- border: 0;
- padding: 4px;
-}
-
-.groupPlaceholderMarginVerticalNone {
- margin-top: 0;
- margin-bottom: 0;
- padding: 12px;
-}
-
-.groupPlaceholderMarginHorizontalNone {
- margin-left: 0;
- margin-right: 0;
-}
-
.groupPlaceholderDark {
background-color: $black;
border: $border-width dashed $gray-70;
diff --git a/packages/block-library/src/media-text/edit.native.js b/packages/block-library/src/media-text/edit.native.js
index 61a8d889f7d7e0..efc4d24618acf5 100644
--- a/packages/block-library/src/media-text/edit.native.js
+++ b/packages/block-library/src/media-text/edit.native.js
@@ -18,6 +18,7 @@ import { Component } from '@wordpress/element';
import {
Toolbar,
} from '@wordpress/components';
+import { withSelect } from '@wordpress/data';
import { compose } from '@wordpress/compose';
import { withViewportMatch } from '@wordpress/viewport';
@@ -121,8 +122,7 @@ class MediaTextEdit extends Component {
onWidthChange={ this.onWidthChange }
commitWidthChange={ this.commitWidthChange }
onFocus={ this.props.onFocus }
- isSelected={ isSelected }
- { ...{ mediaAlt, mediaId, mediaType, mediaUrl, mediaPosition, mediaWidth, imageFill, focalPoint } }
+ { ...{ mediaAlt, mediaId, mediaType, mediaUrl, mediaPosition, mediaWidth, imageFill, focalPoint, isSelected } }
/>
);
}
@@ -132,8 +132,9 @@ class MediaTextEdit extends Component {
attributes,
backgroundColor,
setAttributes,
- isSelected,
isMobile,
+ isSelected,
+ isParentSelected,
} = this.props;
const {
isStackedOnMobile,
@@ -144,8 +145,10 @@ class MediaTextEdit extends Component {
const shouldStack = isStackedOnMobile && isMobile;
const temporaryMediaWidth = shouldStack ? 100 : ( this.state.mediaWidth || mediaWidth );
const widthString = `${ temporaryMediaWidth }%`;
- const mediaContainerPadding = ( ( this.props.isInnerBlock || this.props.parentId ) && ! this.props.isMediaTextChildSelected ) ? 0 : 16;
- const mediaContainerVerticalPadding = isSelected ? 8 : 5;
+
+ // TODO
+ const parentSelectedStyle = isParentSelected ? { margin: 2 } : { margin: 0, border: 0, padding: 0 };
+ const selectedStyle = isSelected ? { margin: 0 } : parentSelectedStyle;
const containerStyles = {
...styles[ 'wp-block-media-text' ],
...styles[ `is-vertically-aligned-${ verticalAlignment || 'center' }` ],
@@ -153,9 +156,6 @@ class MediaTextEdit extends Component {
...( shouldStack ? styles[ 'is-stacked-on-mobile' ] : {} ),
...( shouldStack && mediaPosition === 'right' ? styles[ 'is-stacked-on-mobile.has-media-on-the-right' ] : {} ),
backgroundColor: backgroundColor.color,
- ...{ padding: isSelected ? 8 : mediaContainerPadding },
- paddingTop: mediaContainerVerticalPadding,
- paddingBottom: mediaContainerVerticalPadding,
};
const innerBlockWidth = shouldStack ? 100 : ( 100 - temporaryMediaWidth );
const innerBlockWidthString = `${ innerBlockWidth }%`;
@@ -189,23 +189,15 @@ class MediaTextEdit extends Component {
/>
-
+
{ this.renderMediaArea() }
-
-
-
-
+
+
>
@@ -215,5 +207,18 @@ class MediaTextEdit extends Component {
export default compose(
withColors( 'backgroundColor' ),
- withViewportMatch( { isMobile: '< small' } )
+ withViewportMatch( { isMobile: '< small' } ),
+ withSelect( ( select, { clientId } ) => {
+ const {
+ getSelectedBlockClientId,
+ } = select( 'core/block-editor' );
+
+ const selectedBlockClientId = getSelectedBlockClientId();
+ const isParentSelected = selectedBlockClientId && selectedBlockClientId === clientId;
+
+ return {
+ isSelected: selectedBlockClientId === clientId,
+ isParentSelected,
+ };
+ } ),
)( MediaTextEdit );
diff --git a/packages/block-library/src/media-text/media-container.js b/packages/block-library/src/media-text/media-container.js
index cb45eb27830047..fce35487d6a03b 100644
--- a/packages/block-library/src/media-text/media-container.js
+++ b/packages/block-library/src/media-text/media-container.js
@@ -93,7 +93,7 @@ class MediaContainer extends Component {
}
renderPlaceholder() {
- const { onSelectMedia, className, noticeUI, style } = this.props;
+ const { onSelectMedia, className, noticeUI } = this.props;
return (
}
@@ -106,7 +106,6 @@ class MediaContainer extends Component {
allowedTypes={ ALLOWED_MEDIA_TYPES }
notices={ noticeUI }
onError={ this.onUploadError }
- style={ style }
/>
);
}
diff --git a/packages/edit-post/src/components/visual-editor/style.native.scss b/packages/edit-post/src/components/visual-editor/style.native.scss
index 4ade220b5dd9e9..59587f891a5e07 100644
--- a/packages/edit-post/src/components/visual-editor/style.native.scss
+++ b/packages/edit-post/src/components/visual-editor/style.native.scss
@@ -13,9 +13,9 @@
}
.blockHolderFocused {
- border-color: $gray-lighten-30;
+ border-color: $blue-wordpress;
}
.blockHolderFocusedDark {
- border-color: $gray-70;
+ border-color: $blue-30;
}
diff --git a/packages/editor/src/components/post-title/index.native.js b/packages/editor/src/components/post-title/index.native.js
index 4d456f2b4ee320..b2355b52e15b8f 100644
--- a/packages/editor/src/components/post-title/index.native.js
+++ b/packages/editor/src/components/post-title/index.native.js
@@ -119,20 +119,15 @@ export default compose(
isPostTitleSelected,
} = select( 'core/editor' );
- const { getSelectedBlockClientId, getBlockRootClientId, getLowestCommonAncestorWithSelectedBlock } = select( 'core/block-editor' );
+ const { getSelectedBlockClientId, getBlockRootClientId } = select( 'core/block-editor' );
- const clientId = getSelectedBlockClientId();
- const isAnyBlockSelected = !! clientId;
- const parentId = getBlockRootClientId( clientId );
- const firstToSelect = getLowestCommonAncestorWithSelectedBlock( clientId );
- const isInnerBlock = parentId && firstToSelect !== parentId;
-
- const isDimmed = isAnyBlockSelected && isInnerBlock;
+ const selectedId = getSelectedBlockClientId();
+ const selectionIsNested = !! getBlockRootClientId( selectedId );
return {
- isAnyBlockSelected,
+ isAnyBlockSelected: !! selectedId,
isSelected: isPostTitleSelected(),
- isDimmed,
+ isDimmed: selectionIsNested,
};
} ),
withDispatch( ( dispatch ) => {
From 941baefe9463785a013a006d6e48046957f22138 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Fri, 22 Nov 2019 20:52:02 +0100
Subject: [PATCH 052/183] fix dimed style aplied
---
packages/block-editor/src/components/block-list/block.native.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 6945bbc110e809..772ffb8387830a 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -268,10 +268,10 @@ export default compose( [
const isParentSelected = selectedBlockClientId && selectedBlockClientId === parents[ 0 ];
const isAncestorSelected = selectedBlockClientId && parents.includes( selectedBlockClientId );
const selectionIsNested = !! getBlockRootClientId( selectedBlockClientId );
- const isDimmed = ! isSelected && ! isAncestorSelected && firstToSelectId === clientId && selectionIsNested;
const isDescendantSelected = selectedBlockClientId && getBlockParents( selectedBlockClientId ).includes( clientId );
const isTouchable = isSelected || isDescendantSelected || selectedBlockClientId === parentId || parentId === '';
+ const isDimmed = ! isSelected && selectionIsNested && ! isAncestorSelected && ! isDescendantSelected && ( firstToSelectId === clientId || rootBlockId === clientId );
return {
icon,
From df0f5a48d674adaaf9dcd8b8fac28ff55acc83f8 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Mon, 25 Nov 2019 11:37:14 +0100
Subject: [PATCH 053/183] add unit test for selector
---
.../block-editor/src/store/test/selectors.js | 80 +++++++++++++++++++
1 file changed, 80 insertions(+)
diff --git a/packages/block-editor/src/store/test/selectors.js b/packages/block-editor/src/store/test/selectors.js
index 6000c76b824f0e..d1be26d50fda04 100644
--- a/packages/block-editor/src/store/test/selectors.js
+++ b/packages/block-editor/src/store/test/selectors.js
@@ -62,6 +62,7 @@ const {
INSERTER_UTILITY_HIGH,
INSERTER_UTILITY_MEDIUM,
INSERTER_UTILITY_LOW,
+ getLowestCommonAncestorWithSelectedBlock,
} = selectors;
describe( 'selectors', () => {
@@ -2343,4 +2344,83 @@ describe( 'selectors', () => {
} );
} );
} );
+
+ describe( 'getLowestCommonAncestorWithSelectedBlock', () => {
+ const blocks = {
+ order: {
+ '': [ 'a', 'b' ],
+ a: [ 'c', 'd' ],
+ d: [ 'e' ],
+ f: [ 'b' ],
+ },
+ parents: {
+ a: '',
+ b: '',
+ c: 'a',
+ d: 'a',
+ e: 'd',
+ f: 'b',
+ },
+ };
+
+ it( 'should not be defined if there is no block selected', () => {
+ const state = {
+ blocks,
+ selectionStart: {},
+ selectionEnd: {},
+ };
+
+ expect( getLowestCommonAncestorWithSelectedBlock( state, 'd' ) ).not.toBeDefined();
+ } );
+
+ it( 'should not be defined if selected block has no parent', () => {
+ const state = {
+ blocks,
+ selectionStart: { clientId: 'b' },
+ selectionEnd: { clientId: 'b' },
+ };
+
+ expect( getLowestCommonAncestorWithSelectedBlock( state, 'b' ) ).toBe( 'b' );
+ } );
+
+ it( 'should not be defined if selected block has no common parent with given block', () => {
+ const state = {
+ blocks,
+ selectionStart: { clientId: 'd' },
+ selectionEnd: { clientId: 'd' },
+ };
+
+ expect( getLowestCommonAncestorWithSelectedBlock( state, 'f' ) ).not.toBeDefined();
+ } );
+
+ it( 'should return block id if selected block is ancestor of block', () => {
+ const state = {
+ blocks,
+ selectionStart: { clientId: 'c' },
+ selectionEnd: { clientId: 'c' },
+ };
+
+ expect( getLowestCommonAncestorWithSelectedBlock( state, 'a' ) ).toBe( 'a' );
+ } );
+
+ it( 'should return block id if selected block is nested child of given block', () => {
+ const state = {
+ blocks,
+ selectionStart: { clientId: 'e' },
+ selectionEnd: { clientId: 'e' },
+ };
+
+ expect( getLowestCommonAncestorWithSelectedBlock( state, 'a' ) ).toBe( 'a' );
+ } );
+
+ it( 'should return block id if selected block has common parent with given block', () => {
+ const state = {
+ blocks,
+ selectionStart: { clientId: 'e' },
+ selectionEnd: { clientId: 'e' },
+ };
+
+ expect( getLowestCommonAncestorWithSelectedBlock( state, 'c' ) ).toBe( 'a' );
+ } );
+ } );
} );
From 8ab7ebe1f04ac3f401aeb37941aae9bd7f6e5b08 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Mon, 25 Nov 2019 12:45:19 +0100
Subject: [PATCH 054/183] use getBlockCount to check if block has children
---
.../block-editor/src/components/block-list/block.native.js | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 772ffb8387830a..7513897fb6fbaa 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -230,17 +230,19 @@ export default compose( [
getBlockIndex,
getBlocks,
isBlockSelected,
+ __unstableGetBlockWithoutInnerBlocks,
getBlockHierarchyRootClientId,
getSelectedBlockClientId,
getBlock,
getBlockRootClientId,
getLowestCommonAncestorWithSelectedBlock,
getBlockParents,
+ getBlockCount,
} = select( 'core/block-editor' );
const order = getBlockIndex( clientId, rootClientId );
const isSelected = isBlockSelected( clientId );
const isLastBlock = order === getBlocks().length - 1;
- const block = getBlock( clientId );
+ const block = __unstableGetBlockWithoutInnerBlocks( clientId );
const { name, attributes, isValid } = block || {};
const blockType = getBlockType( name || 'core/missing' );
const title = blockType.title;
@@ -263,7 +265,7 @@ export default compose( [
const commonAncestorIndex = clientTree.indexOf( commonAncestor ) - 1;
const firstToSelectId = commonAncestor || selectedBlockClientId ? clientTree[ commonAncestorIndex ] : rootBlockId;
- const hasChildren = block.innerBlocks.length !== 0;
+ const hasChildren = getBlockCount( clientId ) !== 0;
const hasParent = !! parents[ 0 ];
const isParentSelected = selectedBlockClientId && selectedBlockClientId === parents[ 0 ];
const isAncestorSelected = selectedBlockClientId && parents.includes( selectedBlockClientId );
From 3ebc50cae041b90c06f0e29b6bb294a7ed56dc25 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Mon, 25 Nov 2019 08:18:31 +0100
Subject: [PATCH 055/183] fix group margins, placeholder and appender
---
.../src/components/block-list/block.native.js | 24 +++++-
.../components/block-list/block.native.scss | 12 +++
.../src/components/block-list/index.native.js | 13 +--
.../button-block-appender/styles.native.scss | 6 +-
.../block-editor/src/store/test/selectors.js | 80 +++++++++++++++++++
.../block-library/src/group/edit.native.js | 1 +
.../src/group/editor.native.scss | 9 ++-
.../src/media-text/edit.native.js | 7 +-
8 files changed, 133 insertions(+), 19 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 772ffb8387830a..37c39021b99134 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -108,6 +108,8 @@ class BlockListBlock extends Component {
getStylesFromColorScheme,
isSmallScreen,
selectionIsNested,
+ isGroupType,
+ isEmptyGroup,
} = this.props;
const fullSolidBorderStyle = {
@@ -119,7 +121,7 @@ class BlockListBlock extends Component {
return { ...styles.selectedParent, ...fullSolidBorderStyle };
}
- if ( isSmallScreen && ! selectionIsNested ) {
+ if ( isSmallScreen && ! selectionIsNested && ! isGroupType ) {
return {
...styles.selectedRootLeaf,
...styles.semiSolidBordered,
@@ -127,6 +129,10 @@ class BlockListBlock extends Component {
};
}
+ if ( isGroupType && isEmptyGroup ) {
+ return { ...styles.selectedLeaf, ...fullSolidBorderStyle, ... { paddingHorizontal: 1 } };
+ }
+
return { ...styles.selectedLeaf, ...fullSolidBorderStyle };
}
@@ -137,6 +143,8 @@ class BlockListBlock extends Component {
isAncestorSelected,
hasParent,
getStylesFromColorScheme,
+ isEmptyGroup,
+ isGroupType,
} = this.props;
if ( ! hasParent ) {
@@ -150,12 +158,15 @@ class BlockListBlock extends Component {
};
return hasChildren ?
- { ...styles.childOfSelected, ...dashedBorderStyle } :
- { ...styles.childOfSelectedLeaf, ...dashedBorderStyle };
+ { ...styles.childOfSelected, ...( ! isEmptyGroup ? dashedBorderStyle : styles.horizontalSpaceNone ) } :
+ { ...styles.childOfSelectedLeaf, ...( ! isEmptyGroup ? dashedBorderStyle : styles.horizontalSpaceNone ) };
}
if ( isAncestorSelected ) {
- return styles.descendantOfSelectedLeaf;
+ return {
+ ...styles.descendantOfSelectedLeaf,
+ ...( isGroupType && ! isEmptyGroup && styles.marginHorizontalNone ),
+ };
}
return hasChildren ? styles.neutral : styles.full;
@@ -273,6 +284,9 @@ export default compose( [
const isTouchable = isSelected || isDescendantSelected || selectedBlockClientId === parentId || parentId === '';
const isDimmed = ! isSelected && selectionIsNested && ! isAncestorSelected && ! isDescendantSelected && ( firstToSelectId === clientId || rootBlockId === clientId );
+ const isGroupType = name === 'core/group';
+ const isEmptyGroup = isGroupType && block.innerBlocks.length === 0;
+
return {
icon,
name: name || 'core/missing',
@@ -294,6 +308,8 @@ export default compose( [
isTouchable,
isDimmed,
selectionIsNested,
+ isGroupType,
+ isEmptyGroup,
};
} ),
withDispatch( ( dispatch, ownProps, { select } ) => {
diff --git a/packages/block-editor/src/components/block-list/block.native.scss b/packages/block-editor/src/components/block-list/block.native.scss
index d42e9f2e1ba26f..ff9cea835a83c9 100644
--- a/packages/block-editor/src/components/block-list/block.native.scss
+++ b/packages/block-editor/src/components/block-list/block.native.scss
@@ -42,6 +42,18 @@
opacity: 0.2;
}
+.horizontalSpaceNone {
+ padding-left: 0;
+ padding-right: 0;
+ margin-left: 0;
+ margin-right: 0;
+}
+
+.marginHorizontalNone {
+ margin-left: 0;
+ margin-right: 0;
+}
+
.blockTitle {
background-color: $gray;
padding-left: 8px;
diff --git a/packages/block-editor/src/components/block-list/index.native.js b/packages/block-editor/src/components/block-list/index.native.js
index 80748396403ccd..c4e7b923ce434f 100644
--- a/packages/block-editor/src/components/block-list/index.native.js
+++ b/packages/block-editor/src/components/block-list/index.native.js
@@ -96,11 +96,14 @@ export class BlockList extends Component {
ListFooterComponent={ withFooter && this.renderBlockListFooter }
/>
- { renderAppender && blockClientIds.length > 0 &&
-
+ { renderAppender && blockClientIds.length > 0 && (
+
+
+
+ )
}
);
diff --git a/packages/block-editor/src/components/button-block-appender/styles.native.scss b/packages/block-editor/src/components/button-block-appender/styles.native.scss
index 05b8adb13c549c..591fd011a241a6 100644
--- a/packages/block-editor/src/components/button-block-appender/styles.native.scss
+++ b/packages/block-editor/src/components/button-block-appender/styles.native.scss
@@ -1,9 +1,9 @@
.appender {
align-items: center;
justify-content: center;
- padding: 12px;
- margin-left: 4px;
- margin-right: 4px;
+ padding: 9px;
+ margin-left: 0;
+ margin-right: 0;
background-color: $white;
border: $border-width solid $light-gray-500;
border-radius: 4px;
diff --git a/packages/block-editor/src/store/test/selectors.js b/packages/block-editor/src/store/test/selectors.js
index 6000c76b824f0e..d1be26d50fda04 100644
--- a/packages/block-editor/src/store/test/selectors.js
+++ b/packages/block-editor/src/store/test/selectors.js
@@ -62,6 +62,7 @@ const {
INSERTER_UTILITY_HIGH,
INSERTER_UTILITY_MEDIUM,
INSERTER_UTILITY_LOW,
+ getLowestCommonAncestorWithSelectedBlock,
} = selectors;
describe( 'selectors', () => {
@@ -2343,4 +2344,83 @@ describe( 'selectors', () => {
} );
} );
} );
+
+ describe( 'getLowestCommonAncestorWithSelectedBlock', () => {
+ const blocks = {
+ order: {
+ '': [ 'a', 'b' ],
+ a: [ 'c', 'd' ],
+ d: [ 'e' ],
+ f: [ 'b' ],
+ },
+ parents: {
+ a: '',
+ b: '',
+ c: 'a',
+ d: 'a',
+ e: 'd',
+ f: 'b',
+ },
+ };
+
+ it( 'should not be defined if there is no block selected', () => {
+ const state = {
+ blocks,
+ selectionStart: {},
+ selectionEnd: {},
+ };
+
+ expect( getLowestCommonAncestorWithSelectedBlock( state, 'd' ) ).not.toBeDefined();
+ } );
+
+ it( 'should not be defined if selected block has no parent', () => {
+ const state = {
+ blocks,
+ selectionStart: { clientId: 'b' },
+ selectionEnd: { clientId: 'b' },
+ };
+
+ expect( getLowestCommonAncestorWithSelectedBlock( state, 'b' ) ).toBe( 'b' );
+ } );
+
+ it( 'should not be defined if selected block has no common parent with given block', () => {
+ const state = {
+ blocks,
+ selectionStart: { clientId: 'd' },
+ selectionEnd: { clientId: 'd' },
+ };
+
+ expect( getLowestCommonAncestorWithSelectedBlock( state, 'f' ) ).not.toBeDefined();
+ } );
+
+ it( 'should return block id if selected block is ancestor of block', () => {
+ const state = {
+ blocks,
+ selectionStart: { clientId: 'c' },
+ selectionEnd: { clientId: 'c' },
+ };
+
+ expect( getLowestCommonAncestorWithSelectedBlock( state, 'a' ) ).toBe( 'a' );
+ } );
+
+ it( 'should return block id if selected block is nested child of given block', () => {
+ const state = {
+ blocks,
+ selectionStart: { clientId: 'e' },
+ selectionEnd: { clientId: 'e' },
+ };
+
+ expect( getLowestCommonAncestorWithSelectedBlock( state, 'a' ) ).toBe( 'a' );
+ } );
+
+ it( 'should return block id if selected block has common parent with given block', () => {
+ const state = {
+ blocks,
+ selectionStart: { clientId: 'e' },
+ selectionEnd: { clientId: 'e' },
+ };
+
+ expect( getLowestCommonAncestorWithSelectedBlock( state, 'c' ) ).toBe( 'a' );
+ } );
+ } );
} );
diff --git a/packages/block-library/src/group/edit.native.js b/packages/block-library/src/group/edit.native.js
index 3fa539252d60ac..f6f9c74d31fb35 100644
--- a/packages/block-library/src/group/edit.native.js
+++ b/packages/block-library/src/group/edit.native.js
@@ -27,6 +27,7 @@ function GroupEdit( {
return (
);
}
diff --git a/packages/block-library/src/group/editor.native.scss b/packages/block-library/src/group/editor.native.scss
index a9bd31ed59e63d..2c069442b15ac4 100644
--- a/packages/block-library/src/group/editor.native.scss
+++ b/packages/block-library/src/group/editor.native.scss
@@ -1,8 +1,8 @@
.groupPlaceholder {
padding: 12px;
margin: 16px;
- margin-left: 2px;
- margin-right: 2px;
+ margin-left: 0;
+ margin-right: 0;
background-color: $white;
border: $border-width dashed $gray;
border-radius: 4px;
@@ -12,3 +12,8 @@
background-color: $black;
border: $border-width dashed $gray-70;
}
+
+.marginVerticalDense {
+ margin-top: $block-selected-child-margin;
+ margin-bottom: $block-selected-child-margin;
+}
diff --git a/packages/block-library/src/media-text/edit.native.js b/packages/block-library/src/media-text/edit.native.js
index efc4d24618acf5..19fb714927f39d 100644
--- a/packages/block-library/src/media-text/edit.native.js
+++ b/packages/block-library/src/media-text/edit.native.js
@@ -134,7 +134,6 @@ class MediaTextEdit extends Component {
setAttributes,
isMobile,
isSelected,
- isParentSelected,
} = this.props;
const {
isStackedOnMobile,
@@ -146,9 +145,7 @@ class MediaTextEdit extends Component {
const temporaryMediaWidth = shouldStack ? 100 : ( this.state.mediaWidth || mediaWidth );
const widthString = `${ temporaryMediaWidth }%`;
- // TODO
- const parentSelectedStyle = isParentSelected ? { margin: 2 } : { margin: 0, border: 0, padding: 0 };
- const selectedStyle = isSelected ? { margin: 0 } : parentSelectedStyle;
+ const selectedStyle = ! shouldStack && { paddingRight: mediaPosition === 'rigth' ? 0 : 12, paddingLeft: mediaPosition === 'left' ? 0 : 12 };
const containerStyles = {
...styles[ 'wp-block-media-text' ],
...styles[ `is-vertically-aligned-${ verticalAlignment || 'center' }` ],
@@ -189,7 +186,7 @@ class MediaTextEdit extends Component {
/>
-
+
{ this.renderMediaArea() }
From cd5b6084a780c53a98bf7b26b32cded9f16f5f58 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Mon, 25 Nov 2019 13:56:19 +0100
Subject: [PATCH 056/183] adjustments
---
.../src/components/block-list/block.native.js | 14 +++++---------
packages/block-editor/src/store/test/selectors.js | 2 +-
.../block-library/src/group/editor.native.scss | 4 ++--
3 files changed, 8 insertions(+), 12 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 3350f72bf12f05..9780ca45eb5190 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -109,7 +109,6 @@ class BlockListBlock extends Component {
isSmallScreen,
selectionIsNested,
isGroupType,
- isEmptyGroup,
} = this.props;
const fullSolidBorderStyle = {
@@ -129,7 +128,7 @@ class BlockListBlock extends Component {
};
}
- if ( isGroupType && isEmptyGroup ) {
+ if ( isGroupType && ! hasChildren ) {
return { ...styles.selectedLeaf, ...fullSolidBorderStyle, ... { paddingHorizontal: 1 } };
}
@@ -143,7 +142,6 @@ class BlockListBlock extends Component {
isAncestorSelected,
hasParent,
getStylesFromColorScheme,
- isEmptyGroup,
isGroupType,
} = this.props;
@@ -158,14 +156,14 @@ class BlockListBlock extends Component {
};
return hasChildren ?
- { ...styles.childOfSelected, ...( ! isEmptyGroup ? dashedBorderStyle : styles.horizontalSpaceNone ) } :
- { ...styles.childOfSelectedLeaf, ...( ! isEmptyGroup ? dashedBorderStyle : styles.horizontalSpaceNone ) };
+ { ...styles.childOfSelected, ...( isGroupType ? dashedBorderStyle : styles.horizontalSpaceNone ) } :
+ { ...styles.childOfSelectedLeaf, ...( ! isGroupType ? dashedBorderStyle : styles.horizontalSpaceNone ) };
}
if ( isAncestorSelected ) {
return {
...styles.descendantOfSelectedLeaf,
- ...( isGroupType && ! isEmptyGroup && styles.marginHorizontalNone ),
+ ...( isGroupType && styles.marginHorizontalNone ),
};
}
@@ -276,7 +274,7 @@ export default compose( [
const commonAncestorIndex = clientTree.indexOf( commonAncestor ) - 1;
const firstToSelectId = commonAncestor || selectedBlockClientId ? clientTree[ commonAncestorIndex ] : rootBlockId;
- const hasChildren = getBlockCount( clientId ) !== 0;
+ const hasChildren = !! getBlockCount( clientId );
const hasParent = !! parents[ 0 ];
const isParentSelected = selectedBlockClientId && selectedBlockClientId === parents[ 0 ];
const isAncestorSelected = selectedBlockClientId && parents.includes( selectedBlockClientId );
@@ -287,7 +285,6 @@ export default compose( [
const isDimmed = ! isSelected && selectionIsNested && ! isAncestorSelected && ! isDescendantSelected && ( firstToSelectId === clientId || rootBlockId === clientId );
const isGroupType = name === 'core/group';
- const isEmptyGroup = isGroupType && block.innerBlocks.length === 0;
return {
icon,
@@ -311,7 +308,6 @@ export default compose( [
isDimmed,
selectionIsNested,
isGroupType,
- isEmptyGroup,
};
} ),
withDispatch( ( dispatch, ownProps, { select } ) => {
diff --git a/packages/block-editor/src/store/test/selectors.js b/packages/block-editor/src/store/test/selectors.js
index d1be26d50fda04..18a5894f9ac910 100644
--- a/packages/block-editor/src/store/test/selectors.js
+++ b/packages/block-editor/src/store/test/selectors.js
@@ -2393,7 +2393,7 @@ describe( 'selectors', () => {
expect( getLowestCommonAncestorWithSelectedBlock( state, 'f' ) ).not.toBeDefined();
} );
- it( 'should return block id if selected block is ancestor of block', () => {
+ it( 'should return block id if selected block is ancestor of given block', () => {
const state = {
blocks,
selectionStart: { clientId: 'c' },
diff --git a/packages/block-library/src/group/editor.native.scss b/packages/block-library/src/group/editor.native.scss
index 2c069442b15ac4..0404d8897f6e44 100644
--- a/packages/block-library/src/group/editor.native.scss
+++ b/packages/block-library/src/group/editor.native.scss
@@ -1,8 +1,8 @@
.groupPlaceholder {
padding: 12px;
margin: 16px;
- margin-left: 0;
- margin-right: 0;
+ margin-left: $block-selected-child-margin;
+ margin-right: $block-selected-child-margin;
background-color: $white;
border: $border-width dashed $gray;
border-radius: 4px;
From bd5a1f83f4aacaa042dff1a1d22197301f93dd8a Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Tue, 26 Nov 2019 09:21:00 +0100
Subject: [PATCH 057/183] add parameters to style
---
.../src/components/button-block-appender/styles.native.scss | 5 +++++
packages/block-library/src/group/editor.native.scss | 4 ++--
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/packages/block-editor/src/components/button-block-appender/styles.native.scss b/packages/block-editor/src/components/button-block-appender/styles.native.scss
index 591fd011a241a6..fea218077ceb94 100644
--- a/packages/block-editor/src/components/button-block-appender/styles.native.scss
+++ b/packages/block-editor/src/components/button-block-appender/styles.native.scss
@@ -26,3 +26,8 @@
color: $background-dark-secondary;
background-color: $gray-40;
}
+
+.paddingToContent {
+ padding-left: $block-selected-to-content;
+ padding-right: $block-selected-to-content;
+}
diff --git a/packages/block-library/src/group/editor.native.scss b/packages/block-library/src/group/editor.native.scss
index 0404d8897f6e44..a8db71c8c636f6 100644
--- a/packages/block-library/src/group/editor.native.scss
+++ b/packages/block-library/src/group/editor.native.scss
@@ -1,6 +1,6 @@
.groupPlaceholder {
- padding: 12px;
- margin: 16px;
+ padding: $block-selected-to-content;
+ margin: $block-edge-to-content;
margin-left: $block-selected-child-margin;
margin-right: $block-selected-child-margin;
background-color: $white;
From 3219ad0d1f5eae0cf61ed99b74f46c49f1cfad86 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Tue, 26 Nov 2019 15:28:40 +0100
Subject: [PATCH 058/183] refactor for removing isGroupType
---
.../src/components/block-list/block.native.js | 24 +++++++++----------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 9780ca45eb5190..ef48898baac5d5 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -108,7 +108,7 @@ class BlockListBlock extends Component {
getStylesFromColorScheme,
isSmallScreen,
selectionIsNested,
- isGroupType,
+ isInnerBlockHolder,
} = this.props;
const fullSolidBorderStyle = {
@@ -120,7 +120,7 @@ class BlockListBlock extends Component {
return { ...styles.selectedParent, ...fullSolidBorderStyle };
}
- if ( isSmallScreen && ! selectionIsNested && ! isGroupType ) {
+ if ( isSmallScreen && ! selectionIsNested && ! isInnerBlockHolder ) {
return {
...styles.selectedRootLeaf,
...styles.semiSolidBordered,
@@ -128,10 +128,6 @@ class BlockListBlock extends Component {
};
}
- if ( isGroupType && ! hasChildren ) {
- return { ...styles.selectedLeaf, ...fullSolidBorderStyle, ... { paddingHorizontal: 1 } };
- }
-
return { ...styles.selectedLeaf, ...fullSolidBorderStyle };
}
@@ -142,7 +138,6 @@ class BlockListBlock extends Component {
isAncestorSelected,
hasParent,
getStylesFromColorScheme,
- isGroupType,
} = this.props;
if ( ! hasParent ) {
@@ -156,14 +151,14 @@ class BlockListBlock extends Component {
};
return hasChildren ?
- { ...styles.childOfSelected, ...( isGroupType ? dashedBorderStyle : styles.horizontalSpaceNone ) } :
- { ...styles.childOfSelectedLeaf, ...( ! isGroupType ? dashedBorderStyle : styles.horizontalSpaceNone ) };
+ { ...styles.childOfSelected, ...dashedBorderStyle } :
+ { ...styles.childOfSelectedLeaf, ...dashedBorderStyle };
}
if ( isAncestorSelected ) {
return {
...styles.descendantOfSelectedLeaf,
- ...( isGroupType && styles.marginHorizontalNone ),
+ ...( hasChildren && styles.marginHorizontalNone ),
};
}
@@ -248,6 +243,11 @@ export default compose( [
getBlockParents,
getBlockCount,
} = select( 'core/block-editor' );
+
+ const {
+ getGroupingBlockName,
+ } = select( 'core/blocks' );
+
const order = getBlockIndex( clientId, rootClientId );
const isSelected = isBlockSelected( clientId );
const isLastBlock = order === getBlocks().length - 1;
@@ -284,7 +284,7 @@ export default compose( [
const isTouchable = isSelected || isDescendantSelected || selectedBlockClientId === parentId || parentId === '';
const isDimmed = ! isSelected && selectionIsNested && ! isAncestorSelected && ! isDescendantSelected && ( firstToSelectId === clientId || rootBlockId === clientId );
- const isGroupType = name === 'core/group';
+ const isInnerBlockHolder = name === getGroupingBlockName();
return {
icon,
@@ -307,7 +307,7 @@ export default compose( [
isTouchable,
isDimmed,
selectionIsNested,
- isGroupType,
+ isInnerBlockHolder,
};
} ),
withDispatch( ( dispatch, ownProps, { select } ) => {
From e3b540acc8f3daf77427dc644af5dd5302865d7b Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Tue, 26 Nov 2019 23:41:15 +0100
Subject: [PATCH 059/183] refactor group placeholder
---
packages/block-library/src/group/edit.native.js | 2 +-
packages/block-library/src/group/editor.native.scss | 5 +++++
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/packages/block-library/src/group/edit.native.js b/packages/block-library/src/group/edit.native.js
index f6f9c74d31fb35..3cfdd34700b81f 100644
--- a/packages/block-library/src/group/edit.native.js
+++ b/packages/block-library/src/group/edit.native.js
@@ -27,7 +27,7 @@ function GroupEdit( {
return (
);
}
diff --git a/packages/block-library/src/group/editor.native.scss b/packages/block-library/src/group/editor.native.scss
index a8db71c8c636f6..2f426176fe22a2 100644
--- a/packages/block-library/src/group/editor.native.scss
+++ b/packages/block-library/src/group/editor.native.scss
@@ -17,3 +17,8 @@
margin-top: $block-selected-child-margin;
margin-bottom: $block-selected-child-margin;
}
+
+.marginHorizontalNone {
+ margin-left: 0;
+ margin-right: 0;
+}
From f47e6dc8a226f9c30099885d1dbe9951c840de4c Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Wed, 27 Nov 2019 09:55:47 +0100
Subject: [PATCH 060/183] adjust media-text
---
packages/block-library/src/media-text/edit.native.js | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/packages/block-library/src/media-text/edit.native.js b/packages/block-library/src/media-text/edit.native.js
index 19fb714927f39d..e98b62ed4fa2a4 100644
--- a/packages/block-library/src/media-text/edit.native.js
+++ b/packages/block-library/src/media-text/edit.native.js
@@ -134,6 +134,8 @@ class MediaTextEdit extends Component {
setAttributes,
isMobile,
isSelected,
+ isParentSelected,
+ isAncestorSelected,
} = this.props;
const {
isStackedOnMobile,
@@ -186,7 +188,7 @@ class MediaTextEdit extends Component {
/>
-
+
{ this.renderMediaArea() }
@@ -208,14 +210,20 @@ export default compose(
withSelect( ( select, { clientId } ) => {
const {
getSelectedBlockClientId,
+ getBlockRootClientId,
+ getBlockParents,
} = select( 'core/block-editor' );
+ const parents = getBlockParents( clientId, true );
+
const selectedBlockClientId = getSelectedBlockClientId();
- const isParentSelected = selectedBlockClientId && selectedBlockClientId === clientId;
+ const isParentSelected = selectedBlockClientId && selectedBlockClientId === getBlockRootClientId( clientId );
+ const isAncestorSelected = selectedBlockClientId && parents.includes( selectedBlockClientId );
return {
isSelected: selectedBlockClientId === clientId,
isParentSelected,
+ isAncestorSelected,
};
} ),
)( MediaTextEdit );
From ca7e08f11648e9952910a16ac240437b556227d9 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Wed, 27 Nov 2019 12:16:03 +0100
Subject: [PATCH 061/183] finalise group appender logic
---
packages/base-styles/_variables.scss | 1 +
.../block-editor/src/components/block-list/index.native.js | 2 +-
.../block-editor/src/components/block-list/style.native.scss | 5 +++++
.../src/components/button-block-appender/styles.native.scss | 5 -----
4 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/packages/base-styles/_variables.scss b/packages/base-styles/_variables.scss
index 543b1896b94537..9cf33e0d79f0b3 100644
--- a/packages/base-styles/_variables.scss
+++ b/packages/base-styles/_variables.scss
@@ -72,6 +72,7 @@ $block-selected-child-border-width: 1px;
$block-selected-child-padding: 0;
$block-selected-to-content: $block-edge-to-content - $block-selected-margin - $block-selected-border-width;
$block-selected-child-to-content: $block-selected-to-content - $block-selected-child-margin - $block-selected-child-border-width;
+$block-custom-appender-to-content: $block-edge-to-content - $block-selected-margin - $block-selected-child-margin + $block-selected-border-width;
// Buttons & UI Widgets
$radius-round-rectangle: 4px;
diff --git a/packages/block-editor/src/components/block-list/index.native.js b/packages/block-editor/src/components/block-list/index.native.js
index c4e7b923ce434f..eb1824494bf497 100644
--- a/packages/block-editor/src/components/block-list/index.native.js
+++ b/packages/block-editor/src/components/block-list/index.native.js
@@ -97,7 +97,7 @@ export class BlockList extends Component {
/>
{ renderAppender && blockClientIds.length > 0 && (
-
+
Date: Wed, 27 Nov 2019 14:01:35 +0100
Subject: [PATCH 062/183] selection and dim adjustments
---
.../src/components/block-list/block.native.js | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index ef48898baac5d5..ca9deb7bf95742 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -270,9 +270,8 @@ export default compose( [
const selectedBlockClientId = getSelectedBlockClientId();
const commonAncestor = getLowestCommonAncestorWithSelectedBlock( clientId );
- const clientTree = [ clientId, ...parents ];
- const commonAncestorIndex = clientTree.indexOf( commonAncestor ) - 1;
- const firstToSelectId = commonAncestor || selectedBlockClientId ? clientTree[ commonAncestorIndex ] : rootBlockId;
+ const commonAncestorIndex = parents.indexOf( commonAncestor ) - 1;
+ const firstToSelectId = commonAncestor ? parents[ commonAncestorIndex ] : parents[ parents.length - 1 ];
const hasChildren = !! getBlockCount( clientId );
const hasParent = !! parents[ 0 ];
@@ -281,8 +280,9 @@ export default compose( [
const selectionIsNested = !! getBlockRootClientId( selectedBlockClientId );
const isDescendantSelected = selectedBlockClientId && getBlockParents( selectedBlockClientId ).includes( clientId );
- const isTouchable = isSelected || isDescendantSelected || selectedBlockClientId === parentId || parentId === '';
- const isDimmed = ! isSelected && selectionIsNested && ! isAncestorSelected && ! isDescendantSelected && ( firstToSelectId === clientId || rootBlockId === clientId );
+ const isDescendantOfParentSelected = selectedBlockClientId && getBlockParents( selectedBlockClientId ).includes( parentId );
+ const isTouchable = isSelected || isDescendantSelected || isDescendantOfParentSelected || isParentSelected || parentId === '';
+ const isDimmed = ! isSelected && selectionIsNested && ! isAncestorSelected && ! isDescendantSelected && ( isDescendantOfParentSelected || rootBlockId === clientId );
const isInnerBlockHolder = name === getGroupingBlockName();
From 662008e3bbc60a01a953afd940601dc304e9f579 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Thu, 28 Nov 2019 13:59:37 +0100
Subject: [PATCH 063/183] handle semi-bordered
---
packages/block-editor/src/components/block-list/index.native.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/block-editor/src/components/block-list/index.native.js b/packages/block-editor/src/components/block-list/index.native.js
index eb1824494bf497..7e87bce6841206 100644
--- a/packages/block-editor/src/components/block-list/index.native.js
+++ b/packages/block-editor/src/components/block-list/index.native.js
@@ -128,7 +128,7 @@ export class BlockList extends Component {
clientId={ clientId }
rootClientId={ this.props.rootClientId }
onCaretVerticalPositionChange={ this.onCaretVerticalPositionChange }
- isSmallScreen={ ! ReadableContentView.isContentMaxWidth() }
+ isSmallScreen={ ! this.props.isFullyBordered }
/> ) }
{ shouldShowInsertionPointAfter( clientId ) && this.renderAddBlockSeparator() }
From 6414b896c75dc29a8546663c9309a01cb6b500ee Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Fri, 29 Nov 2019 10:51:16 +0100
Subject: [PATCH 064/183] refactor after tug review
---
.../src/components/block-list/block.native.js | 38 ++++++++++++-------
.../src/media-text/edit.native.js | 6 ++-
2 files changed, 30 insertions(+), 14 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index ca9deb7bf95742..2bffa2e373204f 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -107,20 +107,21 @@ class BlockListBlock extends Component {
hasChildren,
getStylesFromColorScheme,
isSmallScreen,
- selectionIsNested,
- isInnerBlockHolder,
+ isRootListInnerBlockHolder,
} = this.props;
- const fullSolidBorderStyle = {
+ const fullSolidBorderStyle = { // define style for full border
...styles.fullSolidBordered,
...getStylesFromColorScheme( styles.solidBorderColor, styles.solidBorderColorDark ),
};
- if ( hasChildren ) {
+ if ( hasChildren ) { // if block has children apply style for selected parent
return { ...styles.selectedParent, ...fullSolidBorderStyle };
}
- if ( isSmallScreen && ! selectionIsNested && ! isInnerBlockHolder ) {
+ // apply semi border selected style when screen is in vertical position
+ // and selected block does not have InnerBlock inside
+ if ( isSmallScreen && ! isRootListInnerBlockHolder ) {
return {
...styles.selectedRootLeaf,
...styles.semiSolidBordered,
@@ -128,6 +129,10 @@ class BlockListBlock extends Component {
};
}
+ /* selected block is one of below:
+ 1. does not have children
+ 2. is not on root list level
+ 3. is an emty group block on root or nested level */
return { ...styles.selectedLeaf, ...fullSolidBorderStyle };
}
@@ -140,28 +145,34 @@ class BlockListBlock extends Component {
getStylesFromColorScheme,
} = this.props;
+ // if block does not have parent apply neutral or full
+ // margins depending if block has children or not
if ( ! hasParent ) {
return hasChildren ? styles.neutral : styles.full;
}
- if ( isParentSelected ) {
- const dashedBorderStyle = {
+ if ( isParentSelected ) { // parent of a block is selected
+ const dashedBorderStyle = { // define style for dashed border
...styles.dashedBordered,
...getStylesFromColorScheme( styles.dashedBorderColor, styles.dashedBorderColorDark ),
};
+ // return apply childOfSelected or childOfSelectedLeaf
+ // margins depending if block has children or not
return hasChildren ?
{ ...styles.childOfSelected, ...dashedBorderStyle } :
{ ...styles.childOfSelectedLeaf, ...dashedBorderStyle };
}
- if ( isAncestorSelected ) {
+ if ( isAncestorSelected ) { // ancestor of a block is selected
return {
...styles.descendantOfSelectedLeaf,
...( hasChildren && styles.marginHorizontalNone ),
};
}
+ // if none of above condition are met return apply neutral or full
+ // margins depending if block has children or not
return hasChildren ? styles.neutral : styles.full;
}
@@ -277,14 +288,15 @@ export default compose( [
const hasParent = !! parents[ 0 ];
const isParentSelected = selectedBlockClientId && selectedBlockClientId === parents[ 0 ];
const isAncestorSelected = selectedBlockClientId && parents.includes( selectedBlockClientId );
- const selectionIsNested = !! getBlockRootClientId( selectedBlockClientId );
+ const isSelectedBlockNested = !! getBlockRootClientId( selectedBlockClientId );
const isDescendantSelected = selectedBlockClientId && getBlockParents( selectedBlockClientId ).includes( clientId );
const isDescendantOfParentSelected = selectedBlockClientId && getBlockParents( selectedBlockClientId ).includes( parentId );
- const isTouchable = isSelected || isDescendantSelected || isDescendantOfParentSelected || isParentSelected || parentId === '';
- const isDimmed = ! isSelected && selectionIsNested && ! isAncestorSelected && ! isDescendantSelected && ( isDescendantOfParentSelected || rootBlockId === clientId );
+ const isTouchable = isSelected || isDescendantOfParentSelected || isParentSelected || parentId === '';
+ const isDimmed = ! isSelected && isSelectedBlockNested && ! isAncestorSelected && ! isDescendantSelected && ( isDescendantOfParentSelected || rootBlockId === clientId );
const isInnerBlockHolder = name === getGroupingBlockName();
+ const isRootListInnerBlockHolder = ! isSelectedBlockNested && isInnerBlockHolder;
return {
icon,
@@ -306,8 +318,8 @@ export default compose( [
isAncestorSelected,
isTouchable,
isDimmed,
- selectionIsNested,
- isInnerBlockHolder,
+ isSelectedBlockNested,
+ isRootListInnerBlockHolder,
};
} ),
withDispatch( ( dispatch, ownProps, { select } ) => {
diff --git a/packages/block-library/src/media-text/edit.native.js b/packages/block-library/src/media-text/edit.native.js
index e98b62ed4fa2a4..8a72d076254fa9 100644
--- a/packages/block-library/src/media-text/edit.native.js
+++ b/packages/block-library/src/media-text/edit.native.js
@@ -158,6 +158,10 @@ class MediaTextEdit extends Component {
};
const innerBlockWidth = shouldStack ? 100 : ( 100 - temporaryMediaWidth );
const innerBlockWidthString = `${ innerBlockWidth }%`;
+ const mediaContainerStyle = {
+ padding: isParentSelected || isAncestorSelected ? 6 : 16,
+ ...( isSelected && { padding: 12 } ),
+ };
const toolbarControls = [ {
icon: 'align-pull-left',
@@ -188,7 +192,7 @@ class MediaTextEdit extends Component {
/>
-
+
{ this.renderMediaArea() }
From 722134da5e5acc936aa3552477c5b0be6e0a6179 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Fri, 29 Nov 2019 12:10:27 +0100
Subject: [PATCH 065/183] add isOpen check to conditionally show/hide appender
button under group block
---
.../src/components/button-block-appender/index.native.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/block-editor/src/components/button-block-appender/index.native.js b/packages/block-editor/src/components/button-block-appender/index.native.js
index b01d3b65109856..3ec783488d257c 100644
--- a/packages/block-editor/src/components/button-block-appender/index.native.js
+++ b/packages/block-editor/src/components/button-block-appender/index.native.js
@@ -20,7 +20,7 @@ function ButtonBlockAppender( { rootClientId } ) {
(
-
@@ -285,8 +282,8 @@ export default compose( [
const firstToSelectId = commonAncestor ? parents[ commonAncestorIndex ] : parents[ parents.length - 1 ];
const hasChildren = !! getBlockCount( clientId );
- const hasParent = !! parents[ 0 ];
- const isParentSelected = selectedBlockClientId && selectedBlockClientId === parents[ 0 ];
+ const hasParent = !! parentId;
+ const isParentSelected = selectedBlockClientId && selectedBlockClientId === parentId;
const isAncestorSelected = selectedBlockClientId && parents.includes( selectedBlockClientId );
const isSelectedBlockNested = !! getBlockRootClientId( selectedBlockClientId );
@@ -318,7 +315,6 @@ export default compose( [
isAncestorSelected,
isTouchable,
isDimmed,
- isSelectedBlockNested,
isRootListInnerBlockHolder,
};
} ),
diff --git a/packages/block-editor/src/components/block-list/index.native.js b/packages/block-editor/src/components/block-list/index.native.js
index 4802cd00af7afb..267d214e3eccc4 100644
--- a/packages/block-editor/src/components/block-list/index.native.js
+++ b/packages/block-editor/src/components/block-list/index.native.js
@@ -71,7 +71,16 @@ export class BlockList extends Component {
}
render() {
- const { clearSelectedBlock, blockClientIds, isFullyBordered, title, header, withFooter = true, renderAppender, isRootList } = this.props;
+ const {
+ clearSelectedBlock,
+ blockClientIds,
+ isFullyBordered,
+ title,
+ header,
+ withFooter = true,
+ renderAppender,
+ isRootList,
+ } = this.props;
return (
-
+
{ this.renderMediaArea() }
-
+
Date: Fri, 6 Dec 2019 15:15:42 +0100
Subject: [PATCH 078/183] @dratwas CR refactor on descendant
---
.../block-editor/src/components/block-list/block.native.js | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 7f8590aa1d2754..aadec72f8015a4 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -287,8 +287,9 @@ export default compose( [
const isAncestorSelected = selectedBlockClientId && parents.includes( selectedBlockClientId );
const isSelectedBlockNested = !! getBlockRootClientId( selectedBlockClientId );
- const isDescendantSelected = selectedBlockClientId && getBlockParents( selectedBlockClientId ).includes( clientId );
- const isDescendantOfParentSelected = selectedBlockClientId && getBlockParents( selectedBlockClientId ).includes( parentId );
+ const selectedParents = selectedBlockClientId ? getBlockParents( selectedBlockClientId ) : [];
+ const isDescendantSelected = selectedParents.includes( clientId );
+ const isDescendantOfParentSelected = selectedParents.includes( parentId );
const isTouchable = isSelected || isDescendantOfParentSelected || isParentSelected || parentId === '';
const isDimmed = ! isSelected && isSelectedBlockNested && ! isAncestorSelected && ! isDescendantSelected && ( isDescendantOfParentSelected || rootBlockId === clientId );
From 417809fbd6a6e7b1b819e8e423ea6c6aa9b1bb52 Mon Sep 17 00:00:00 2001
From: Jakub Binda
Date: Mon, 9 Dec 2019 13:29:29 +0100
Subject: [PATCH 079/183] WIP: setup column block
---
.../src/components/block-list/block.native.js | 3 +-
.../block-list/breadcrumb.native.js | 12 +-
.../src/components/block-list/index.native.js | 5 +-
.../block-library/src/column/edit.native.js | 58 +++
.../src/column/editor.native.scss | 24 ++
.../block-library/src/columns/edit.native.js | 353 ++++++++++--------
.../src/columns/editor.native.scss | 21 +-
packages/block-library/src/index.native.js | 2 +
8 files changed, 310 insertions(+), 168 deletions(-)
create mode 100644 packages/block-library/src/column/edit.native.js
create mode 100644 packages/block-library/src/column/editor.native.scss
diff --git a/packages/block-editor/src/components/block-list/block.native.js b/packages/block-editor/src/components/block-list/block.native.js
index 2bffa2e373204f..abc7fba3c57e1a 100644
--- a/packages/block-editor/src/components/block-list/block.native.js
+++ b/packages/block-editor/src/components/block-list/block.native.js
@@ -295,7 +295,8 @@ export default compose( [
const isTouchable = isSelected || isDescendantOfParentSelected || isParentSelected || parentId === '';
const isDimmed = ! isSelected && isSelectedBlockNested && ! isAncestorSelected && ! isDescendantSelected && ( isDescendantOfParentSelected || rootBlockId === clientId );
- const isInnerBlockHolder = name === getGroupingBlockName();
+ // TODO: find better way to handle full border for columns ( maybe return array from getGoupingBlockName )
+ const isInnerBlockHolder = name === getGroupingBlockName() || name === 'core/columns';
const isRootListInnerBlockHolder = ! isSelectedBlockNested && isInnerBlockHolder;
return {
diff --git a/packages/block-editor/src/components/block-list/breadcrumb.native.js b/packages/block-editor/src/components/block-list/breadcrumb.native.js
index 0bea56e4da6ddf..1a92bc0bd93cde 100644
--- a/packages/block-editor/src/components/block-list/breadcrumb.native.js
+++ b/packages/block-editor/src/components/block-list/breadcrumb.native.js
@@ -20,15 +20,23 @@ import SubdirectorSVG from './subdirectory-icon';
import styles from './breadcrumb.scss';
const BlockBreadcrumb = ( { clientId, blockIcon, rootClientId, rootBlockIcon } ) => {
+ const renderIcon = ( icon, key ) => {
+ if ( typeof icon.src === 'function' ) {
+ return ;
+ }
+ return ;
+ };
+
return (
{/* Open BottomSheet with markup */} }>
{ rootClientId && rootBlockIcon && (
- [ ,
+ [
+ renderIcon( rootBlockIcon, 'parent-icon' ),
,
]
) }
-
+ { renderIcon( blockIcon ) }
diff --git a/packages/block-editor/src/components/block-list/index.native.js b/packages/block-editor/src/components/block-list/index.native.js
index 8803ab6a3f8118..6dd8bca32c719d 100644
--- a/packages/block-editor/src/components/block-list/index.native.js
+++ b/packages/block-editor/src/components/block-list/index.native.js
@@ -94,9 +94,6 @@ export class BlockList extends Component {
ListHeaderComponent={ header }
ListEmptyComponent={ this.renderDefaultBlockAppender }
ListFooterComponent={ withFooter && this.renderBlockListFooter }
- listKey={(item, index) => {
- return clientId;
- }}
/>
{ renderAppender && blockClientIds.length > 0 && (
@@ -187,7 +184,7 @@ export default compose( [
const insertionPoint = getBlockInsertionPoint();
const blockInsertionPointIsVisible = isBlockInsertionPointVisible();
const selectedBlock = getSelectedBlock();
- const hasInnerBlocks = selectedBlock && selectedBlock.name === getGroupingBlockName();
+ const hasInnerBlocks = selectedBlock && ( selectedBlock.name === getGroupingBlockName() || selectedBlock.name === 'core/columns' );
const shouldShowInsertionPointBefore = ( clientId ) => {
return (
blockInsertionPointIsVisible &&
diff --git a/packages/block-library/src/column/edit.native.js b/packages/block-library/src/column/edit.native.js
new file mode 100644
index 00000000000000..b7ece7b095cc34
--- /dev/null
+++ b/packages/block-library/src/column/edit.native.js
@@ -0,0 +1,58 @@
+
+/**
+ * External dependencies
+ */
+import { View } from 'react-native';
+
+/**
+ * WordPress dependencies
+ */
+import { withSelect } from '@wordpress/data';
+import { compose, withPreferredColorScheme } from '@wordpress/compose';
+import {
+ InnerBlocks,
+ withColors,
+} from '@wordpress/block-editor';
+/**
+ * Internal dependencies
+ */
+import styles from './editor.scss';
+
+function ColumnEdit( {
+ hasInnerBlocks,
+ isSelected,
+ getStylesFromColorScheme,
+} ) {
+ // TODO: make sure if column should reder placeholder if whole parent
+ // columns block is not selected
+ if ( ! isSelected && ! hasInnerBlocks ) {
+ return (
+
+ );
+ }
+
+ return (
+
+ );
+}
+
+export default compose( [
+ withColors( 'backgroundColor' ),
+ withSelect( ( select, { clientId } ) => {
+ const {
+ getBlock,
+ } = select( 'core/block-editor' );
+
+ const block = getBlock( clientId );
+
+ return {
+ hasInnerBlocks: !! ( block && block.innerBlocks.length ),
+ };
+ } ),
+ withPreferredColorScheme,
+] )( ColumnEdit );
diff --git a/packages/block-library/src/column/editor.native.scss b/packages/block-library/src/column/editor.native.scss
new file mode 100644
index 00000000000000..fe84f0d5689214
--- /dev/null
+++ b/packages/block-library/src/column/editor.native.scss
@@ -0,0 +1,24 @@
+.columnPlaceholder {
+ padding: $block-selected-to-content;
+ margin: $block-edge-to-content;
+ margin-left: $block-selected-child-margin;
+ margin-right: $block-selected-child-margin;
+ background-color: $white;
+ border: $border-width dashed $gray;
+ border-radius: 4px;
+}
+
+.columnPlaceholderDark {
+ background-color: $black;
+ border: $border-width dashed $gray-70;
+}
+
+.marginVerticalDense {
+ margin-top: $block-selected-child-margin;
+ margin-bottom: $block-selected-child-margin;
+}
+
+.marginHorizontalNone {
+ margin-left: 0;
+ margin-right: 0;
+}
diff --git a/packages/block-library/src/columns/edit.native.js b/packages/block-library/src/columns/edit.native.js
index 2f228f31607b0f..4a73aeb634be88 100644
--- a/packages/block-library/src/columns/edit.native.js
+++ b/packages/block-library/src/columns/edit.native.js
@@ -1,8 +1,8 @@
/**
* External dependencies
*/
-import classnames from 'classnames';
import { View } from 'react-native';
+import classnames from 'classnames';
import { dropRight, times } from 'lodash';
/**
@@ -12,9 +12,6 @@ import { __ } from '@wordpress/i18n';
import {
PanelBody,
RangeControl,
- BottomSheet,
- SVG,
- Path,
Toolbar,
ToolbarButton,
} from '@wordpress/components';
@@ -22,24 +19,29 @@ import {
InspectorControls,
InnerBlocks,
BlockControls,
+ // __experimentalBlockPatternPicker,
BlockVerticalAlignmentToolbar,
} from '@wordpress/block-editor';
-import { withDispatch, useSelect } from '@wordpress/data';
+import {
+ withDispatch,
+ // useDispatch,
+ useSelect,
+} from '@wordpress/data';
+import { compose, withPreferredColorScheme } from '@wordpress/compose';
import { createBlock } from '@wordpress/blocks';
-import { useState, useEffect } from '@wordpress/element';
/**
* Internal dependencies
*/
import {
- // getColumnsTemplate,
hasExplicitColumnWidths,
getMappedColumnWidths,
getRedistributedColumnWidths,
toWidthPrecision,
} from './utils';
-import Icon from './icon';
+
import styles from './editor.scss';
+import Icon from './icon';
/**
* Allowed blocks constant is passed to InnerBlocks precisely as specified here.
@@ -50,59 +52,7 @@ import styles from './editor.scss';
* @constant
* @type {string[]}
*/
-// const ALLOWED_BLOCKS = [ 'core/column' ];
-const ALLOWED_BLOCKS = [ 'core/button', 'core/paragraph', 'core/heading', 'core/list' ];
-
-/**
- * Template option choices for predefined columns layouts.
- *
- * @constant
- * @type {Array}
- */
-const TEMPLATE_OPTIONS = [
- {
- title: __( 'Two columns; equal split' ),
- icon: ,
- template: [
- [ 'core/column' ],
- [ 'core/column' ],
- ],
- },
- {
- title: __( 'Two columns; one-third, two-thirds split' ),
- icon: ,
- template: [
- [ 'core/column', { width: 33.33 } ],
- [ 'core/column', { width: 66.66 } ],
- ],
- },
- {
- title: __( 'Two columns; two-thirds, one-third split' ),
- icon: ,
- template: [
- [ 'core/column', { width: 66.66 } ],
- [ 'core/column', { width: 33.33 } ],
- ],
- },
- {
- title: __( 'Three columns; equal split' ),
- icon: ,
- template: [
- [ 'core/column' ],
- [ 'core/column' ],
- [ 'core/column' ],
- ],
- },
- {
- title: __( 'Three columns; wide center column' ),
- icon: ,
- template: [
- [ 'core/column', { width: 25 } ],
- [ 'core/column', { width: 50 } ],
- [ 'core/column', { width: 25 } ],
- ],
- },
-];
+const ALLOWED_BLOCKS = [ 'core/column' ];
/**
* Number of columns to assume for template in case the user opts to skip
@@ -112,13 +62,13 @@ const TEMPLATE_OPTIONS = [
*/
const DEFAULT_COLUMNS = 2;
-function ColumnsEdit ( {
+function ColumnsEditContainer( {
attributes,
className,
updateAlignment,
updateColumns,
clientId,
- isSelected,
+ // isSelected,
} ) {
const { verticalAlignment } = attributes;
@@ -127,112 +77,199 @@ function ColumnsEdit ( {
count: select( 'core/block-editor' ).getBlockCount( clientId ),
};
} );
- const [ template, setTemplate ] = useState( 1 ) //getColumnsTemplate( count ) );
- const [ forceUseTemplate, setForceUseTemplate ] = useState( false );
- const [ columnCount, setColumnCount ] = useState( DEFAULT_COLUMNS );
-
- // This is used to force the usage of the template even if the count doesn't match the template
- // The count doesn't match the template once you use undo/redo (this is used to reset to the placeholder state).
- useEffect( () => {
- // Once the template is applied, reset it.
- if ( forceUseTemplate ) {
- setForceUseTemplate( false );
- }
- }, [ forceUseTemplate ] );
const classes = classnames( className, {
[ `are-vertically-aligned-${ verticalAlignment }` ]: verticalAlignment,
} );
- // The template selector is shown when we first insert the columns block (count === 0).
- // or if there's no template available.
- // The count === 0 trick is useful when you use undo/redo.
- const showTemplateSelector = ( count === 0 && ! forceUseTemplate ) || ! template;
-
- if ( ! isSelected ) {
- return (
- [...Array(columnCount)].map((e, i) =>
-
- )
- );
- }
-
-const renderColumns = () => {
- return [...Array(1)].map((e, i) =>
- {
- return i+"_"+index+'_'+item.id+"_";
- }}
- />
- )
- }
-
return (
<>
- {/* { ! showTemplateSelector && ( */}
- <>
-
-
- {
- console.log(value)
- setColumnCount( value )
- // updateColumns( count, value )
- }
- }
- min={ 2 }
- max={ 6 }
- icon={ 'admin-links' }
- />
-
-
-
-
- }
- onClick={ () => console.log('click') }
- />
-
-
-
- >
- {/* ) } */}
- {/* */}
- { renderColumns() }
- {/* {
- // if ( nextTemplate === undefined ) {
- // nextTemplate = getColumnsTemplate( DEFAULT_COLUMNS );
- // }
-
- // setTemplate( nextTemplate );
- // setForceUseTemplate( true );
- // } }
- // __experimentalAllowTemplateOptionSkip
- // template={ showTemplateSelector ? null : template }
+
+
+ updateColumns( count, value ) }
+ min={ 2 }
+ max={ 6 }
+ />
+
+
+
+
+ }
+ onClick={ () => console.log( 'click' ) }
+ />
+
+
+
+
+ {
- return "_"+index+'_'+item.id;
- }}
- /> */}
-
- {/* */}
+ // renderAppender={ isSelected && InnerBlocks.ButtonBlockAppender }
+ />
+
>
);
}
+const ColumnsEditContainerWrapper = withDispatch( ( dispatch, ownProps, registry ) => ( {
+ /**
+ * Update all child Column blocks with a new vertical alignment setting
+ * based on whatever alignment is passed in. This allows change to parent
+ * to overide anything set on a individual column basis.
+ *
+ * @param {string} verticalAlignment the vertical alignment setting
+ */
+ updateAlignment( verticalAlignment ) {
+ const { clientId, setAttributes } = ownProps;
+ const { updateBlockAttributes } = dispatch( 'core/block-editor' );
+ const { getBlockOrder } = registry.select( 'core/block-editor' );
+
+ // Update own alignment.
+ setAttributes( { verticalAlignment } );
+
+ // Update all child Column Blocks to match
+ const innerBlockClientIds = getBlockOrder( clientId );
+ innerBlockClientIds.forEach( ( innerBlockClientId ) => {
+ updateBlockAttributes( innerBlockClientId, {
+ verticalAlignment,
+ } );
+ } );
+ },
+
+ /**
+ * Updates the column count, including necessary revisions to child Column
+ * blocks to grant required or redistribute available space.
+ *
+ * @param {number} previousColumns Previous column count.
+ * @param {number} newColumns New column count.
+ */
+ updateColumns( previousColumns, newColumns ) {
+ const { clientId } = ownProps;
+ const { replaceInnerBlocks } = dispatch( 'core/block-editor' );
+ const { getBlocks } = registry.select( 'core/block-editor' );
+
+ let innerBlocks = getBlocks( clientId );
+ const hasExplicitWidths = hasExplicitColumnWidths( innerBlocks );
+
+ // Redistribute available width for existing inner blocks.
+ const isAddingColumn = newColumns > previousColumns;
+
+ if ( isAddingColumn && hasExplicitWidths ) {
+ // If adding a new column, assign width to the new column equal to
+ // as if it were `1 / columns` of the total available space.
+ const newColumnWidth = toWidthPrecision( 100 / newColumns );
+
+ // Redistribute in consideration of pending block insertion as
+ // constraining the available working width.
+ const widths = getRedistributedColumnWidths( innerBlocks, 100 - newColumnWidth );
+
+ innerBlocks = [
+ ...getMappedColumnWidths( innerBlocks, widths ),
+ ...times( newColumns - previousColumns, () => {
+ return createBlock( 'core/column', {
+ width: newColumnWidth,
+ } );
+ } ),
+ ];
+ } else if ( isAddingColumn ) {
+ innerBlocks = [
+ ...innerBlocks,
+ ...times( newColumns - previousColumns, () => {
+ return createBlock( 'core/column' );
+ } ),
+ ];
+ } else {
+ // The removed column will be the last of the inner blocks.
+ innerBlocks = dropRight( innerBlocks, previousColumns - newColumns );
+
+ if ( hasExplicitWidths ) {
+ // Redistribute as if block is already removed.
+ const widths = getRedistributedColumnWidths( innerBlocks, 100 );
+
+ innerBlocks = getMappedColumnWidths( innerBlocks, widths );
+ }
+ }
+
+ replaceInnerBlocks( clientId, innerBlocks, false );
+ },
+} ) )( ColumnsEditContainer );
+
+// TODO: implement "templates" to allow select column layout
+
+// const createBlocksFromInnerBlocksTemplate = ( innerBlocksTemplate ) => {
+// return map(
+// innerBlocksTemplate,
+// ( [ name, attributes, innerBlocks = [] ] ) =>
+// createBlock( name, attributes, createBlocksFromInnerBlocksTemplate( innerBlocks ) )
+// );
+// };
+
+const ColumnsEdit = ( props ) => {
+ const { clientId, name, isSelected, getStylesFromColorScheme } = props;
+ // const { blockType, defaultPattern, hasInnerBlocks, patterns } = useSelect( ( select ) => {
+ const { hasInnerBlocks } = useSelect( ( select ) => {
+ const {
+ __experimentalGetBlockPatterns,
+ getBlockType,
+ __experimentalGetDefaultBlockPattern,
+ } = select( 'core/blocks' );
+
+ return {
+ blockType: getBlockType( name ),
+ defaultPattern: __experimentalGetDefaultBlockPattern( name ),
+ hasInnerBlocks: select( 'core/block-editor' ).getBlocks( clientId ).length > 0,
+ patterns: __experimentalGetBlockPatterns( name ),
+ };
+ }, [ clientId, name ] );
+
+ // const { replaceInnerBlocks } = useDispatch( 'core/block-editor' );
+
+ // TODO: make sure if columns should reder placeholder if block is not selected
+ if ( ! isSelected && ! hasInnerBlocks ) {
+ return (
+
+ );
+ }
+
+ return (
+
+ );
+
+ // TODO: implement "templates" to allow select column layout
+
+ // return (
+ // <__experimentalBlockPatternPicker
+ // icon={ get( blockType, [ 'icon', 'src' ] ) }
+ // label={ get( blockType, [ 'title' ] ) }
+ // patterns={ patterns }
+ // onSelect={ ( nextPattern = defaultPattern ) => {
+ // if ( nextPattern.attributes ) {
+ // props.setAttributes( nextPattern.attributes );
+ // }
+ // if ( nextPattern.innerBlocks ) {
+ // replaceInnerBlocks(
+ // props.clientId,
+ // createBlocksFromInnerBlocksTemplate( nextPattern.innerBlocks )
+ // );
+ // }
+ // } }
+ // allowSkip
+ // />
+ // );
+};
-export default ( ColumnsEdit );
+export default compose( [
+ withPreferredColorScheme,
+] )( ColumnsEdit );
diff --git a/packages/block-library/src/columns/editor.native.scss b/packages/block-library/src/columns/editor.native.scss
index 6077cb504a394f..ff92d0885ba3dc 100644
--- a/packages/block-library/src/columns/editor.native.scss
+++ b/packages/block-library/src/columns/editor.native.scss
@@ -1,7 +1,22 @@
-.columnPlaceholder {
+.columnsPlaceholder {
padding: 12px;
margin-bottom: 12px;
background-color: $white;
- border: $border-width dashed $light-gray-500;
+ border: $border-width dashed $gray;
border-radius: 4px;
-}
\ No newline at end of file
+}
+
+.columnsPlaceholderDark {
+ background-color: $black;
+ border: $border-width dashed $gray-70;
+}
+
+.marginVerticalDense {
+ margin-top: $block-selected-child-margin;
+ margin-bottom: $block-selected-child-margin;
+}
+
+.marginHorizontalNone {
+ margin-left: 0;
+ margin-right: 0;
+}
diff --git a/packages/block-library/src/index.native.js b/packages/block-library/src/index.native.js
index d9d975374c7cfc..32d59be1684420 100644
--- a/packages/block-library/src/index.native.js
+++ b/packages/block-library/src/index.native.js
@@ -151,6 +151,8 @@ export const registerCoreBlocks = () => {
// eslint-disable-next-line no-undef
!! __DEV__ ? columns : null,
// eslint-disable-next-line no-undef
+ !! __DEV__ ? column : null,
+ // eslint-disable-next-line no-undef
!! __DEV__ ? group : null,
spacer,
].forEach( registerBlock );
From 4cf89d0b690a6f849f48c1528130f2b0c1e06f9c Mon Sep 17 00:00:00 2001
From: lukewalczak
Date: Wed, 11 Dec 2019 14:41:58 +0100
Subject: [PATCH 080/183] Squash all commits related to Column block component
---
.eslintrc.js | 56 +-
.github/CODEOWNERS | 10 +-
.github/PULL_REQUEST_TEMPLATE.md | 1 +
.npmpackagejsonlintrc.json | 39 +
.travis.yml | 26 +-
README.md | 3 +-
babel.config.js | 5 +-
bin/build-plugin-zip.sh | 2 +
bin/commander.js | 98 +-
bin/get-vendor-scripts.php | 11 +-
bin/packages/build-worker.js | 2 +-
bin/packages/build.js | 5 +-
bin/packages/post-css-config.js | 65 +-
bin/packages/watch.js | 2 +-
bin/update-readmes.js | 2 +-
changelog.txt | 5932 +++++++++++++
docs/contributors/coding-guidelines.md | 247 +-
docs/contributors/develop.md | 1 +
docs/contributors/document.md | 4 +-
docs/contributors/getting-started.md | 46 +-
docs/contributors/git-workflow.md | 21 +-
docs/contributors/native-mobile.md | 8 +
docs/contributors/release.md | 15 +-
docs/contributors/testing-overview.md | 54 +-
.../designers/animation.md | 8 +-
.../designers/block-design.md | 16 +-
.../backward-compatibility/README.md | 64 +
.../developers/block-api/block-deprecation.md | 4 +-
.../block-api/block-registration.md | 20 +-
.../developers/data/data-core-block-editor.md | 94 +-
.../developers/data/data-core-edit-post.md | 4 +-
.../developers/data/data-core-editor.md | 58 +
.../developers/data/data-core-nux.md | 2 +-
.../developers/data/data-core.md | 2 +-
.../developers/themes/block-based-themes.md | 98 +
.../developers/themes/theme-support.md | 40 +
.../block-tutorial/creating-dynamic-blocks.md | 8 +-
.../writing-your-first-block-type.md | 2 +
.../tutorials/javascript/js-build-setup.md | 24 +-
.../developers/tutorials/javascript/readme.md | 2 +
docs/designers-developers/key-concepts.md | 56 +-
docs/manifest-devhub.json | 48 +
docs/manifest.json | 6 +
docs/readme.md | 2 +-
docs/toc.json | 6 +-
docs/tool/update-data.js | 2 +-
gutenberg.php | 6 +-
lerna.json | 2 +-
lib/block-directory.php | 21 +
lib/blocks.php | 6 +-
...-experimental-wp-widget-blocks-manager.php | 20 +-
...ass-wp-rest-block-directory-controller.php | 6 +-
...ler.php => class-wp-rest-widget-forms.php} | 90 +-
lib/client-assets.php | 285 +-
lib/compat.php | 18 +
lib/customizer.php | 2 +-
lib/demo-block-templates/index.html | 65 +
lib/experiments-page.php | 52 +-
lib/load.php | 28 +-
lib/rest-api.php | 8 +-
lib/template-canvas.php | 23 +
lib/template-loader.php | 264 +
lib/template-parts.php | 118 +
lib/templates.php | 98 +-
lib/widgets-page.php | 2 +
lib/widgets.php | 42 +-
package-lock.json | 7465 +++++++----------
package.json | 78 +-
packages/README.md | 10 +
packages/a11y/package.json | 2 +-
packages/annotations/package.json | 2 +-
packages/api-fetch/CHANGELOG.md | 6 +
packages/api-fetch/package.json | 2 +-
packages/api-fetch/src/index.js | 58 +-
packages/api-fetch/src/index.native.js | 10 -
.../api-fetch/src/middlewares/media-upload.js | 74 +
.../api-fetch/src/middlewares/preloading.js | 100 +-
.../src/middlewares/test/preloading.js | 54 +-
packages/api-fetch/src/test/index.js | 11 +
packages/api-fetch/src/utils/response.js | 70 +
packages/autop/package.json | 3 +-
.../babel-plugin-import-jsx-pragma/README.md | 8 +-
packages/babel-plugin-makepot/package.json | 2 +-
packages/babel-preset-default/package.json | 2 +-
packages/base-styles/.npmrc | 1 +
packages/base-styles/README.md | 51 +
.../base-styles}/_animations.scss | 0
.../base-styles}/_breakpoints.scss | 0
.../base-styles}/_colors.scss | 0
.../base-styles}/_mixins.scss | 20 +-
.../base-styles}/_variables.scss | 14 +-
.../base-styles}/_z-index.scss | 17 +-
packages/base-styles/index.js | 60 +
packages/base-styles/package.json | 25 +
packages/blob/package.json | 3 +-
packages/block-directory/package.json | 3 +-
packages/block-directory/src/index.js | 3 +-
packages/block-directory/src/plugins/index.js | 15 +
.../index.js | 6 +-
packages/block-editor/CHANGELOG.md | 6 +-
packages/block-editor/README.md | 86 +-
packages/block-editor/package.json | 2 +-
.../alignment-toolbar/index.native.js | 5 -
.../components/autocomplete/index.native.js | 1 +
.../src/components/block-breadcrumb/index.js | 77 +
.../components/block-breadcrumb/style.scss | 41 +
.../src/components/block-draggable/index.js | 71 +-
.../src/components/block-drop-zone/index.js | 42 +-
.../src/components/block-edit/context.js | 20 +-
.../src/components/block-edit/index.js | 3 +-
.../src/components/block-inspector/index.js | 40 +-
.../src/components/block-inspector/style.scss | 18 +
.../components/block-list-appender/style.scss | 2 +-
.../src/components/block-list-footer/index.js | 10 +
.../block-list/block-async-mode-provider.js | 7 +-
.../src/components/block-list/block-html.js | 83 +-
.../block-mobile-floating-toolbar.native.js | 34 +-
.../block-mobile-floating-toolbar.native.scss | 13 +-
.../block-list/block-mobile-toolbar.js | 21 -
.../src/components/block-list/block.js | 160 +-
.../src/components/block-list/block.native.js | 179 +-
.../components/block-list/block.native.scss | 99 +-
.../src/components/block-list/breadcrumb.js | 15 +-
.../block-list/breadcrumb.native.js | 76 +
.../block-list/breadcrumb.native.scss | 28 +
.../src/components/block-list/index.js | 319 +-
.../src/components/block-list/index.native.js | 107 +-
.../components/block-list/insertion-point.js | 122 +-
.../components/block-list/multi-controls.js | 2 +
.../components/block-list/style.native.scss | 38 +-
.../src/components/block-list/style.scss | 406 +-
.../block-list/subdirectory-icon.js | 18 +
.../components/block-list/test/block-html.js | 110 -
.../block-list/use-multi-selection.js | 200 +
.../components/block-mobile-toolbar/index.js | 24 +
.../index.native.js} | 2 +-
.../style.native.scss} | 0
.../block-mobile-toolbar/style.scss | 29 +
.../src/components/block-mover/drag-handle.js | 39 -
.../src/components/block-mover/icons.js | 12 +
.../src/components/block-mover/index.js | 82 +-
.../block-mover/mover-description.js | 51 +-
.../src/components/block-mover/style.scss | 33 +-
.../src/components/block-mover/test/index.js | 42 +-
.../src/components/block-navigation/list.js | 48 +-
.../components/block-navigation/style.scss | 18 +
.../components/block-pattern-picker/index.js | 67 +
.../block-pattern-picker/style.scss | 74 +
.../src/components/block-preview/index.js | 23 +-
.../block-settings/container.native.js | 6 +
.../block-settings/container.native.scss | 4 +
.../src/components/block-switcher/style.scss | 2 +-
.../src/components/block-toolbar/index.js | 45 +-
.../components/block-toolbar/index.native.js | 44 +-
.../src/components/block-toolbar/style.scss | 2 +
.../components/button-block-appender/index.js | 43 +-
.../button-block-appender/index.native.js | 18 +-
.../button-block-appender/styles.native.scss | 20 +-
.../src/components/caption/index.native.js | 2 +-
.../src/components/color-palette/control.scss | 4 -
.../src/components/colors/index.js | 1 +
.../src/components/colors/use-colors.js | 350 +
.../src/components/colors/with-colors.js | 2 +-
.../test/__snapshots__/index.js.snap | 24 +-
.../src/components/copy-handler/index.js | 68 +-
.../test/__snapshots__/index.js.snap | 6 +-
.../src/components/gradient-picker/control.js | 19 +-
.../components/gradient-picker/control.scss | 4 -
.../src/components/gradient-picker/index.js | 20 +-
.../src/components/gradient-picker/panel.js | 32 +
.../src/components/gradients/index.js | 77 +
.../components/ignore-nested-events/index.js | 2 +-
packages/block-editor/src/components/index.js | 17 +-
.../src/components/index.native.js | 5 +-
.../src/components/inner-blocks/README.md | 63 -
.../src/components/inner-blocks/index.js | 35 +-
.../components/inner-blocks/index.native.js | 17 +-
.../src/components/inner-blocks/style.scss | 75 -
.../inner-blocks/template-picker.js | 67 -
.../components/inserter-list-item/index.js | 9 +-
.../components/inserter-list-item/style.scss | 3 +-
.../src/components/inserter/index.js | 142 +-
.../src/components/inserter/menu.js | 64 +-
.../src/components/inserter/menu.native.js | 20 +-
.../src/components/inserter/style.scss | 14 +-
.../inspector-advanced-controls/index.js | 4 +-
.../src/components/link-control/README.md | 109 +
.../src/components/link-control/index.js | 269 +
.../components/link-control/search-input.js | 69 +
.../components/link-control/search-item.js | 51 +
.../link-control/settings-drawer.js | 50 +
.../src/components/link-control/style.scss | 207 +
.../test/__snapshots__/index.js.snap | 3 +
.../link-control/test/fixtures/index.js | 41 +
.../src/components/link-control/test/index.js | 629 ++
.../components/media-placeholder/README.md | 6 +-
.../src/components/media-placeholder/index.js | 4 +-
.../media-placeholder/index.native.js | 23 +-
.../media-placeholder/styles.native.scss | 14 +-
.../components/media-replace-flow/index.js | 203 +
.../components/media-replace-flow/style.scss | 76 +
.../media-upload-progress/index.native.js | 6 +-
.../media-upload-progress/styles.native.scss | 3 +
.../src/components/media-upload/README.md | 2 +-
.../src/components/media-upload/check.js | 2 +-
.../src/components/media-upload/index.js | 2 +-
.../components/media-upload/index.native.js | 132 +-
.../media-upload/test/index.native.js | 20 +-
.../multi-select-scroll-into-view/index.js | 53 +-
.../multi-selection-inspector/style.scss | 3 +-
.../components/page-template-picker/button.js | 19 +
.../page-template-picker/button.native.js | 20 +
.../page-template-picker/container.js | 9 +
.../page-template-picker/container.native.js | 6 +
.../page-template-picker/default-templates.js | 6 +
.../components/page-template-picker/index.js | 10 +
.../components/page-template-picker/picker.js | 42 +
.../use-page-template-picker-visible.js | 32 +
.../with-page-template-picker-visible.js | 24 +
.../src/components/plain-text/index.native.js | 7 +-
.../src/components/provider/index.js | 37 +-
.../src/components/provider/index.native.js | 6 +-
.../responsive-block-control/README.md | 237 +
.../responsive-block-control/index.js | 97 +
.../responsive-block-control/label.js | 21 +
.../responsive-block-control/style.scss | 47 +
.../test/__snapshots__/index.js.snap | 3 +
.../responsive-block-control/test/index.js | 354 +
.../src/components/rich-text/README.md | 4 +
.../rich-text/file-paste-handler.js | 11 +
.../rich-text/file-paste-handler.native.js | 3 +
.../rich-text/format-toolbar-container.js | 36 +
.../format-toolbar-container.native.js | 16 +
.../src/components/rich-text/index.js | 101 +-
.../src/components/rich-text/index.native.js | 213 -
.../rich-text/remove-browser-shortcuts.js | 2 +-
.../remove-browser-shortcuts.native.js | 1 +
.../src/components/rich-text/style.scss | 4 -
.../skip-to-selected-block/index.js | 2 +-
.../src/components/tool-selector/index.js | 81 +
.../src/components/tool-selector/style.scss | 5 +
.../src/components/typewriter/index.js | 5 +-
.../src/components/ungroup-button/icon.js | 4 +-
.../components/ungroup-button/index.native.js | 10 +-
.../src/components/url-input/README.md | 4 +
.../src/components/url-input/button.js | 10 +-
.../src/components/url-input/index.js | 137 +-
.../src/components/url-input/style.scss | 2 +-
.../src/components/url-input/test/button.js | 8 +-
.../src/components/url-popover/style.scss | 18 +-
.../video-player}/gridicon-play.native.js | 0
.../components/video-player/index.native.js} | 5 +-
.../video-player/styles.native.scss} | 0
.../src/components/warning/style.scss | 5 -
.../src/components/writing-flow/index.js | 10 +-
packages/block-editor/src/hooks/align.js | 64 +-
packages/block-editor/src/hooks/anchor.js | 4 +-
.../src/hooks/custom-class-name.js | 4 +-
packages/block-editor/src/hooks/test/align.js | 82 +-
packages/block-editor/src/store/actions.js | 66 +-
packages/block-editor/src/store/defaults.js | 113 +-
packages/block-editor/src/store/effects.js | 56 +-
packages/block-editor/src/store/reducer.js | 29 +-
packages/block-editor/src/store/selectors.js | 125 +-
.../block-editor/src/store/test/selectors.js | 119 +
packages/block-editor/src/style.scss | 9 +-
.../src/utils/get-paste-event-data.js | 71 +
packages/block-library/package.json | 4 +-
packages/block-library/src/audio/edit.js | 12 +-
packages/block-library/src/audio/index.js | 1 +
packages/block-library/src/audio/style.scss | 7 +
.../src/block/edit-panel/editor.scss | 10 +
packages/block-library/src/block/edit.js | 2 -
packages/block-library/src/block/editor.scss | 2 +-
.../src/block/indicator/editor.scss | 12 -
.../src/block/indicator/index.js | 19 -
packages/block-library/src/button/block.json | 3 +
packages/block-library/src/button/edit.js | 320 +-
packages/block-library/src/button/save.js | 8 +-
.../block-library/src/classic/editor.scss | 5 -
packages/block-library/src/code/edit.js | 5 +-
.../block-library/src/code/edit.native.js | 10 +-
packages/block-library/src/code/editor.scss | 54 -
packages/block-library/src/code/index.js | 7 +-
packages/block-library/src/code/save.js | 7 +-
packages/block-library/src/code/test/utils.js | 41 +-
.../block-library/src/code/theme.native.scss | 5 +
packages/block-library/src/code/utils.js | 71 +-
.../block-library/src/column/edit.native.js | 58 +
.../src/column/editor.native.scss | 24 +
.../block-library/src/columns/deprecated.js | 10 +-
packages/block-library/src/columns/edit.js | 200 +-
.../block-library/src/columns/edit.native.js | 275 +
.../src/columns/editor.native.scss | 22 +
.../block-library/src/columns/editor.scss | 72 +-
packages/block-library/src/columns/icon.js | 6 +-
packages/block-library/src/columns/index.js | 12 +-
.../block-library/src/columns/patterns.js | 63 +
packages/block-library/src/columns/style.scss | 1 -
.../block-library/src/columns/test/utils.js | 20 -
packages/block-library/src/columns/utils.js | 22 +-
packages/block-library/src/cover/block.json | 6 +
packages/block-library/src/cover/edit.js | 808 +-
packages/block-library/src/cover/editor.scss | 5 +-
packages/block-library/src/cover/index.js | 3 +-
packages/block-library/src/cover/save.js | 20 +
packages/block-library/src/cover/shared.js | 2 +-
packages/block-library/src/cover/style.scss | 121 +-
.../block-library/src/cover/transforms.js | 18 +-
packages/block-library/src/editor.scss | 7 +-
.../block-library/src/embed/core-embeds.js | 6 +-
.../block-library/src/embed/embed-controls.js | 11 +-
packages/block-library/src/embed/style.scss | 6 +
.../embed/test/__snapshots__/index.js.snap | 2 +-
packages/block-library/src/file/edit.js | 10 +-
packages/block-library/src/file/index.js | 2 +-
packages/block-library/src/gallery/edit.js | 115 +-
.../block-library/src/gallery/editor.scss | 4 +-
.../src/gallery/gallery-button.native.js | 47 +
.../gallery/gallery-image-style.native.scss | 161 +
.../src/gallery/gallery-image.native.js | 298 +
.../src/gallery/gallery-styles.native.scss | 3 +
packages/block-library/src/gallery/gallery.js | 101 +
.../src/gallery/gallery.native.js | 132 +
packages/block-library/src/gallery/index.js | 4 +-
.../block-library/src/gallery/shared-icon.js | 11 +
.../src/gallery/shared-icon.native.js | 18 +
.../src/gallery/styles.native.scss | 7 +
.../src/gallery/tiles-styles.native.scss | 11 +
.../block-library/src/gallery/tiles.native.js | 80 +
.../block-library/src/group/edit.native.js | 9 +-
.../src/group/editor.native.scss | 22 +-
packages/block-library/src/group/editor.scss | 14 -
packages/block-library/src/group/index.js | 4 +-
packages/block-library/src/heading/edit.js | 97 +-
.../src/heading/heading-level-icon.js | 4 +-
.../src/heading/heading-toolbar.js | 9 +-
.../block-library/src/heading/transforms.js | 17 +-
packages/block-library/src/html/edit.js | 25 +-
packages/block-library/src/html/transforms.js | 11 +-
packages/block-library/src/image/block.json | 6 +
packages/block-library/src/image/constants.js | 2 +-
packages/block-library/src/image/edit.js | 311 +-
.../block-library/src/image/edit.native.js | 173 +-
packages/block-library/src/image/editor.scss | 3 +-
packages/block-library/src/image/icon.js | 4 +-
packages/block-library/src/image/index.js | 3 +-
packages/block-library/src/image/save.js | 7 +-
packages/block-library/src/image/style.scss | 9 +-
.../src/image/styles.native.scss | 20 +-
.../src/image/test/edit.native.js | 6 +-
.../block-library/src/image/transforms.js | 9 +-
packages/block-library/src/image/utils.js | 40 +-
packages/block-library/src/index.js | 41 +-
packages/block-library/src/index.native.js | 18 +-
.../block-library/src/latest-posts/edit.js | 12 +-
.../src/legacy-widget/edit/dom-manager.js | 45 +-
.../src/legacy-widget/edit/handler.js | 177 +-
.../src/legacy-widget/edit/index.js | 83 +-
.../src/legacy-widget/edit/placeholder.js | 34 +-
.../src/legacy-widget/editor.scss | 12 +
.../block-library/src/legacy-widget/index.php | 119 +-
packages/block-library/src/list/block.json | 4 +
packages/block-library/src/list/edit.js | 25 +-
packages/block-library/src/list/editor.scss | 5 -
.../src/list/ordered-list-settings.native.js | 3 -
packages/block-library/src/list/save.js | 3 +-
packages/block-library/src/list/transforms.js | 76 +-
packages/block-library/src/media-text/edit.js | 13 +-
.../src/media-text/edit.native.js | 81 +-
.../block-library/src/media-text/editor.scss | 73 +-
.../src/media-text/icon-retry.native.js | 6 +
.../block-library/src/media-text/index.js | 2 +-
.../src/media-text/media-container.js | 6 +-
.../src/media-text/media-container.native.js | 317 +-
.../src/media-text/style.native.scss | 102 +
.../block-library/src/media-text/style.scss | 70 +-
.../block-library/src/missing/edit.native.js | 81 +-
.../src/missing/style.native.scss | 97 +-
.../test/__snapshots__/edit.native.js.snap | 30 +
.../src/missing/test/edit.native.js | 77 +
.../block.json | 14 +-
.../block-library/src/navigation-link/edit.js | 282 +
.../src/navigation-link/editor.scss | 110 +
.../src/navigation-link/index.js | 30 +
.../save.js | 0
.../src/navigation-menu-item/edit.js | 160 -
.../src/navigation-menu-item/editor.scss | 70 -
.../navigation-menu-item/menu-item-actions.js | 111 -
.../block-library/src/navigation-menu/edit.js | 99 -
.../src/navigation-menu/editor.scss | 18 -
.../src/navigation-menu/index.php | 72 -
.../src/navigation/block-colors-selector.js | 89 +
.../src/navigation/block-navigation-list.js | 41 +
packages/block-library/src/navigation/edit.js | 221 +
.../block-library/src/navigation/editor.scss | 202 +
.../block-library/src/navigation/icons.js | 20 +
.../{navigation-menu => navigation}/index.js | 13 +-
.../block-library/src/navigation/index.php | 150 +
.../{navigation-menu => navigation}/save.js | 0
.../block-library/src/navigation/style.scss | 176 +
.../block-library/src/navigation/theme.scss | 6 +
.../use-block-navigator.js | 38 +-
packages/block-library/src/nextpage/index.js | 1 +
packages/block-library/src/paragraph/edit.js | 321 +-
.../src/paragraph/edit.native.js | 15 +-
.../block-library/src/paragraph/editor.scss | 5 +
.../block-library/src/paragraph/style.scss | 7 -
.../block-library/src/paragraph/transforms.js | 11 +-
.../block-library/src/post-content/block.json | 4 +
.../block-library/src/post-content/edit.js | 3 +
.../block-library/src/post-content/icon.js | 11 +
.../index.js | 14 +-
.../block-library/src/post-content/index.php | 36 +
.../block-library/src/post-title/block.json | 4 +
packages/block-library/src/post-title/edit.js | 3 +
packages/block-library/src/post-title/icon.js | 11 +
.../block-library/src/post-title/index.js | 20 +
.../block-library/src/post-title/index.php | 32 +
.../block-library/src/preformatted/block.json | 3 +-
.../block-library/src/preformatted/edit.js | 13 +-
.../src/preformatted/edit.native.js | 32 +
.../block-library/src/preformatted/index.js | 5 +-
.../src/preformatted/styles.native.scss | 25 +
.../src/preformatted/transforms.js | 8 +-
.../block-library/src/pullquote/deprecated.js | 106 +
packages/block-library/src/pullquote/edit.js | 29 +-
packages/block-library/src/pullquote/index.js | 7 +-
packages/block-library/src/pullquote/save.js | 14 +-
.../block-library/src/quote/transforms.js | 10 +-
packages/block-library/src/rss/edit.js | 4 +-
packages/block-library/src/rss/index.php | 12 +-
packages/block-library/src/search/index.php | 7 +-
packages/block-library/src/search/style.scss | 1 +
.../block-library/src/site-title/block.json | 4 +
packages/block-library/src/site-title/edit.js | 39 +
.../block-library/src/site-title/editor.scss | 6 +
packages/block-library/src/site-title/icon.js | 12 +
.../block-library/src/site-title/index.js | 20 +
.../block-library/src/site-title/index.php | 28 +
.../block-library/src/social-link/edit.js | 15 +-
.../block-library/src/social-link/index.php | 2 +-
.../src/social-link/social-list.js | 4 +-
.../block-library/src/social-links/edit.js | 1 +
.../src/social-links/editor.scss | 6 +-
.../block-library/src/social-links/style.scss | 9 +
.../block-library/src/spacer/edit.native.js | 66 +
.../src/spacer/editor.native.scss | 18 +
packages/block-library/src/style.scss | 101 +-
packages/block-library/src/table/block.json | 6 +
.../block-library/src/table/deprecated.js | 105 +-
packages/block-library/src/table/edit.js | 59 +-
packages/block-library/src/table/editor.scss | 10 +-
packages/block-library/src/table/save.js | 11 +-
packages/block-library/src/table/theme.scss | 4 +
.../block-library/src/table/transforms.js | 23 +-
.../src/template-part/block.json | 15 +
.../block-library/src/template-part/edit.js | 3 +
.../block-library/src/template-part/index.js | 18 +
.../block-library/src/template-part/index.php | 60 +
packages/block-library/src/theme.scss | 1 +
packages/block-library/src/verse/block.json | 3 +-
packages/block-library/src/verse/edit.js | 1 +
packages/block-library/src/verse/index.js | 8 +-
.../src/video/edit-common-settings.js | 72 +
packages/block-library/src/video/edit.js | 70 +-
.../block-library/src/video/edit.native.js | 31 +-
packages/block-library/src/video/style.scss | 7 +
.../package.json | 3 +-
.../package.json | 3 +-
packages/blocks/README.md | 6 +-
packages/blocks/package.json | 2 +-
packages/blocks/src/api/factory.js | 16 +-
packages/blocks/src/api/index.js | 2 +
packages/blocks/src/api/index.native.js | 43 -
packages/blocks/src/api/parser.js | 6 +-
.../blocks/src/api/raw-handling/br-remover.js | 21 +
.../raw-handling/empty-paragraph-remover.js | 16 +
.../raw-handling/html-formatting-remover.js | 76 +
packages/blocks/src/api/raw-handling/index.js | 7 +-
.../src/api/raw-handling/paste-handler.js | 20 +-
.../raw-handling/phrasing-content-reducer.js | 11 +-
.../src/api/raw-handling/phrasing-content.js | 54 +-
.../api/raw-handling/shortcode-converter.js | 24 +-
.../test/html-formatting-remover.js | 110 +
packages/blocks/src/api/raw-handling/utils.js | 32 +-
packages/blocks/src/api/registration.js | 84 +-
packages/blocks/src/api/serializer.js | 25 +-
.../src/block-content-provider/index.js | 4 +-
packages/blocks/src/store/actions.js | 32 +
packages/blocks/src/store/reducer.js | 42 +
packages/blocks/src/store/selectors.js | 41 +-
packages/blocks/src/store/test/actions.js | 43 +
packages/blocks/src/store/test/reducer.js | 108 +
packages/blocks/src/store/test/selectors.js | 78 +-
packages/components/CHANGELOG.md | 6 +
packages/components/package.json | 8 +-
.../components/src/animate/stories/index.js | 56 +
packages/components/src/autocomplete/index.js | 17 +-
packages/components/src/base-control/index.js | 23 +-
.../src/base-control/stories/index.js | 33 +
.../src/button-group/stories/index.js | 17 +
packages/components/src/button/README.md | 2 +-
packages/components/src/button/index.js | 8 +-
.../components/src/button/index.native.js | 13 +-
.../components/src/button/stories/index.js | 92 +-
packages/components/src/button/style.scss | 12 +-
packages/components/src/button/test/index.js | 8 +-
packages/components/src/card/README.md | 97 +
packages/components/src/card/body.js | 32 +
packages/components/src/card/context.js | 7 +
packages/components/src/card/divider.js | 26 +
packages/components/src/card/docs/body.md | 24 +
packages/components/src/card/docs/divider.md | 17 +
packages/components/src/card/docs/footer.md | 26 +
packages/components/src/card/docs/header.md | 26 +
packages/components/src/card/docs/media.md | 84 +
packages/components/src/card/footer.js | 34 +
packages/components/src/card/header.js | 34 +
packages/components/src/card/index.js | 51 +
packages/components/src/card/media.js | 19 +
.../components/src/card/stories/_index.js | 43 +
.../components/src/card/stories/_utils.js | 52 +
packages/components/src/card/stories/body.js | 27 +
.../components/src/card/stories/divider.js | 21 +
.../components/src/card/stories/footer.js | 27 +
.../components/src/card/stories/header.js | 27 +
packages/components/src/card/stories/media.js | 166 +
.../components/src/card/styles/card-styles.js | 156 +
packages/components/src/card/test/body.js | 48 +
packages/components/src/card/test/divider.js | 38 +
packages/components/src/card/test/footer.js | 55 +
packages/components/src/card/test/header.js | 55 +
packages/components/src/card/test/index.js | 195 +
packages/components/src/card/test/media.js | 32 +
.../components/src/checkbox-control/README.md | 9 +-
.../src/checkbox-control/stories/index.js | 54 +
.../src/circular-option-picker/index.js | 9 +-
.../src/circular-option-picker/style.scss | 26 +-
.../components/src/clipboard-button/index.js | 16 +-
.../src/clipboard-button/stories/index.js | 42 +
.../components/src/color-indicator/README.md | 2 +-
.../src/color-indicator/stories/index.js | 21 +
.../src/color-palette/stories/index.js | 55 +
.../test/__snapshots__/index.js.snap | 82 +-
.../src/color-palette/test/index.js | 4 +-
packages/components/src/color-picker/hue.js | 6 +-
.../components/src/color-picker/inputs.js | 11 +-
.../components/src/color-picker/saturation.js | 9 +-
.../src/color-picker/stories/index.js | 39 +
.../components/src/color-picker/style.scss | 40 +-
.../test/__snapshots__/index.js.snap | 42 +-
.../src/custom-gradient-picker/constants.js | 11 +
.../custom-gradient-picker/control-points.js | 246 +
.../src/custom-gradient-picker/index.js | 234 +
.../src/custom-gradient-picker/serializer.js | 31 +
.../src/custom-gradient-picker/style.scss | 57 +
.../custom-gradient-picker/test/serializer.js | 96 +
.../src/custom-gradient-picker/utils.js | 176 +
.../src/custom-select-control/index.js | 140 +
.../custom-select-control/stories/index.js | 32 +
.../src/custom-select-control/style.scss | 56 +
.../components/src/dashicon/stories/index.js | 25 +
packages/components/src/date-time/date.js | 2 +-
packages/components/src/date-time/index.js | 3 +-
packages/components/src/date-time/style.scss | 53 +-
.../date-time/test/__snapshots__/time.js.snap | 12 +-
packages/components/src/date-time/time.js | 6 +-
.../src/dimension-control/README.md | 120 +
.../components/src/dimension-control/index.js | 76 +
.../components/src/dimension-control/sizes.js | 45 +
.../src/dimension-control/style.scss | 22 +
.../test/__snapshots__/index.test.js.snap | 163 +
.../src/dimension-control/test/index.test.js | 128 +
packages/components/src/draggable/README.md | 42 +-
.../components/src/draggable/stories/index.js | 69 +
packages/components/src/drop-zone/index.js | 8 +-
.../components/src/dropdown-menu/index.js | 14 +-
.../components/src/dropdown-menu/style.scss | 39 +-
packages/components/src/dropdown/index.js | 10 +-
.../components/src/dropdown/stories/index.js | 86 +
packages/components/src/dropdown/style.scss | 3 +
.../components/src/external-link/index.js | 5 +-
.../src/external-link/stories/index.js | 17 +
.../src/focal-point-picker/index.js | 6 +-
.../components/src/font-size-picker/index.js | 80 +-
.../src/font-size-picker/stories/index.js | 107 +
.../src/font-size-picker/style.scss | 22 +-
.../components/src/form-token-field/token.js | 3 +-
.../components/src/gradient-picker/index.js | 3 +-
packages/components/src/guide/README.md | 56 +
.../components/src/guide/finish-button.js | 33 +
packages/components/src/guide/icons.js | 24 +
packages/components/src/guide/index.js | 107 +
packages/components/src/guide/page-control.js | 33 +
packages/components/src/guide/page.js | 3 +
.../components/src/guide/stories/index.js | 56 +
packages/components/src/guide/style.scss | 119 +
.../src/guide/test/finish-button.js | 49 +
packages/components/src/guide/test/index.js | 78 +
.../components/src/guide/test/page-control.js | 39 +
.../higher-order/navigate-regions/index.js | 9 +-
.../higher-order/navigate-regions/style.scss | 2 +
.../higher-order/with-focus-return/index.js | 8 +-
.../src/higher-order/with-notices/index.js | 5 +-
.../with-spoken-messages/index.js | 4 +-
packages/components/src/icon-button/index.js | 5 +-
.../src/icon-button/stories/index.js | 39 +
packages/components/src/icon/stories/index.js | 95 +
packages/components/src/index.js | 39 +-
packages/components/src/index.native.js | 5 +
.../src/isolated-event-container/index.js | 47 +-
.../src/keyboard-shortcuts/index.native.js | 2 +
packages/components/src/menu-item/index.js | 2 +-
.../components/src/menu-items-choice/index.js | 1 +
.../src/menu-items-choice/style.scss | 12 +
.../bottom-sheet/borderStyles.android.scss | 8 +
.../mobile/bottom-sheet/borderStyles.ios.scss | 9 +
.../src/mobile/bottom-sheet/cell.native.js | 97 +-
.../src/mobile/bottom-sheet/index.native.js | 31 +-
.../mobile/bottom-sheet/picker-cell.native.js | 3 +
.../mobile/bottom-sheet/range-cell.native.js | 215 +
.../bottom-sheet/range-cell.native.scss | 40 +
.../mobile/bottom-sheet/styles.native.scss | 17 +
.../mobile/html-text-input/index.native.js | 14 +-
.../keyboard-aware-flat-list/index.ios.js | 7 +-
.../src/mobile/picker/index.android.js | 1 +
.../components/src/mobile/picker/index.ios.js | 3 +-
packages/components/src/modal/README.md | 40 +-
packages/components/src/modal/index.js | 2 +-
.../components/src/modal/stories/index.js | 64 +
.../components/src/panel/actions.native.js | 36 +
.../components/src/panel/actions.native.scss | 7 +
packages/components/src/panel/body.native.js | 12 +-
.../components/src/panel/body.native.scss | 11 +
packages/components/src/placeholder/README.md | 2 +-
packages/components/src/placeholder/index.js | 5 +-
.../components/src/placeholder/style.scss | 34 +-
.../components/src/placeholder/test/index.js | 6 +-
packages/components/src/popover/index.js | 455 +-
.../components/src/popover/stories/_utils.js | 64 +
.../components/src/popover/stories/index.js | 100 +
packages/components/src/popover/style.scss | 72 +-
.../popover/test/__snapshots__/index.js.snap | 6 +-
packages/components/src/popover/test/utils.js | 23 -
packages/components/src/popover/utils.js | 5 +-
.../src/primitives/block-quotation/README.md | 2 +-
.../components/src/primitives/svg/index.js | 8 +-
.../src/primitives/svg/index.native.js | 12 +-
.../src/primitives/svg/style.native.scss | 2 +-
.../src/radio-control/stories/index.js | 49 +
.../components/src/radio-control/style.scss | 4 +
.../components/src/range-control/README.md | 28 +-
.../src/range-control/index.native.js | 48 +
.../src/range-control/stories/index.js | 99 +
.../components/src/resizable-box/README.md | 8 +
.../components/src/resizable-box/index.js | 5 +-
.../src/resizable-box/stories/index.js | 83 +
.../components/src/resizable-box/style.scss | 6 +-
.../src/responsive-wrapper/index.js | 14 +-
.../src/responsive-wrapper/style.scss | 4 +
packages/components/src/scroll-lock/index.js | 2 +-
.../src/scroll-lock/stories/index.js | 70 +
packages/components/src/slot-fill/context.js | 6 +
packages/components/src/snackbar/README.md | 2 +-
.../components/src/snackbar/stories/index.js | 32 +
packages/components/src/snackbar/style.scss | 13 +-
.../components/src/spinner/stories/index.js | 12 +
packages/components/src/style.scss | 8 +
.../components/src/tab-panel/stories/index.js | 34 +
.../components/src/text-highlight/README.md | 39 +
.../components/src/text-highlight/index.js | 28 +
.../src/text-highlight/stories/index.js | 21 +
.../src/text-highlight/test/index.js | 112 +
packages/components/src/tip/stories/index.js | 20 +
.../src/toggle-control/stories/index.js | 52 +
.../components/src/toggle-control/style.scss | 3 +-
.../accessible-toolbar-button-container.js | 26 +
...essible-toolbar-button-container.native.js | 6 +
.../components/src/toolbar-button/index.js | 61 +-
.../components/src/toolbar-button/style.scss | 73 +-
.../components/src/toolbar-context/index.js | 8 +
.../components/src/toolbar-group/index.js | 112 +
.../src/toolbar-group/stories/index.js | 28 +
.../src/toolbar-group/style.native.scss | 11 +
.../components/src/toolbar-group/style.scss | 58 +
.../src/toolbar-group/test/index.js | 101 +
.../toolbar-group/toolbar-group-collapsed.js | 52 +
.../toolbar-group-collapsed.native.js | 18 +
.../toolbar-group/toolbar-group-container.js | 6 +
.../toolbar-group-container.native.js | 22 +
packages/components/src/toolbar/index.js | 78 +-
.../components/src/toolbar/stories/index.js | 75 +
packages/components/src/toolbar/style.scss | 74 +-
packages/components/src/toolbar/test/index.js | 108 +-
.../src/toolbar/toolbar-container.js | 39 +-
.../src/toolbar/toolbar-container.native.js | 18 +-
packages/components/src/tooltip/style.scss | 6 +-
.../components/src/utils/colors-values.js | 115 +
packages/components/src/utils/colors.js | 40 +
.../components/src/visually-hidden/README.md | 9 +
.../components/src/visually-hidden/index.js | 22 +
.../src/visually-hidden/stories/index.js | 17 +
.../components/src/visually-hidden/style.scss | 30 +
.../components/src/visually-hidden/utils.js | 22 +
packages/components/storybook/.babelrc | 0
packages/components/storybook/config.js | 19 -
packages/compose/README.md | 30 +-
packages/compose/package.json | 3 +-
packages/compose/src/higher-order/compose.js | 14 +
.../higher-order/with-instance-id/index.js | 4 +-
.../higher-order/with-safe-timeout/index.js | 4 +-
.../src/higher-order/with-state/index.js | 2 +-
.../src/hooks/use-media-query/test/index.js | 91 +
.../src/hooks/use-viewport-match/index.js | 60 +
.../hooks/use-viewport-match/test/index.js | 82 +
packages/compose/src/index.js | 17 +-
packages/core-data/README.md | 2 +-
packages/core-data/package.json | 2 +-
packages/core-data/src/actions.js | 18 +-
packages/core-data/src/controls.js | 20 +-
packages/core-data/src/entities.js | 7 +-
packages/core-data/src/entity-provider.js | 76 +-
packages/core-data/src/index.js | 7 +-
.../core-data/src/queried-data/reducer.js | 6 +-
packages/core-data/src/reducer.js | 59 +-
packages/core-data/src/resolvers.js | 2 +-
packages/core-data/src/selectors.js | 13 +-
packages/core-data/src/test/actions.js | 29 +-
packages/core-data/src/test/reducer.js | 210 +-
packages/core-data/src/test/selectors.js | 12 +
packages/data-controls/CHANGELOG.md | 2 +-
packages/data-controls/package.json | 2 +-
packages/data-controls/src/index.js | 41 +-
packages/data-controls/src/test/index.js | 40 +-
packages/data/README.md | 51 +-
packages/data/package.json | 3 +-
.../components/async-mode-provider/context.js | 34 +
.../components/use-dispatch/use-dispatch.js | 3 +-
.../src/components/with-dispatch/index.js | 2 +-
.../data/src/components/with-select/index.js | 2 +-
packages/data/src/factory.js | 4 +-
packages/data/src/index.js | 27 +-
packages/data/src/namespace-store/index.js | 2 +-
.../data/src/plugins/persistence/index.js | 6 +-
packages/data/src/registry.js | 58 +
.../data/src/resolvers-cache-middleware.js | 2 +
packages/date/README.md | 8 +-
packages/date/package.json | 2 +-
packages/date/src/index.js | 52 +-
.../package.json | 2 +-
packages/deprecated/package.json | 3 +-
packages/docgen/package.json | 2 +-
packages/docgen/src/markdown/formatter.js | 12 +
packages/dom-ready/package.json | 3 +-
packages/dom/package.json | 3 +-
packages/e2e-test-utils/CHANGELOG.md | 16 +
packages/e2e-test-utils/README.md | 24 +-
packages/e2e-test-utils/package.json | 2 +-
.../e2e-test-utils/src/create-new-post.js | 16 +-
.../src/enable-page-dialog-accept.js | 4 +-
...-sidebar-panel-toggle-button-with-title.js | 2 +
.../src/find-sidebar-panel-with-title.js | 6 +-
packages/e2e-test-utils/src/index.js | 4 +-
packages/e2e-test-utils/src/is-current-url.js | 2 +-
packages/e2e-test-utils/src/keyboard-mode.js | 13 +-
.../e2e-test-utils/src/observe-focus-loss.js | 37 +-
.../src/press-key-with-modifier.js | 41 +
.../src/set-browser-viewport.js | 52 +-
.../e2e-test-utils/src/transform-block-to.js | 39 +-
.../src/wait-for-window-dimensions.js | 2 +-
packages/e2e-tests/CHANGELOG.md | 6 +
.../e2e-tests/config/performance-reporter.js | 2 +-
.../e2e-tests/config/setup-test-framework.js | 72 +-
.../experimental-features.js} | 33 +-
.../e2e-tests/fixtures/block-transforms.js | 65 +-
.../blocks/core__cover__gradient-image.html | 10 +
.../blocks/core__cover__gradient-image.json | 31 +
.../core__cover__gradient-image.parsed.json | 40 +
...ore__cover__gradient-image.serialized.html | 5 +
.../blocks/core__cover__gradient-video.html | 11 +
.../blocks/core__cover__gradient-video.json | 31 +
.../core__cover__gradient-video.parsed.json | 41 +
...ore__cover__gradient-video.serialized.html | 5 +
.../blocks/core__cover__gradient.html | 9 +
.../blocks/core__cover__gradient.json | 30 +
.../blocks/core__cover__gradient.parsed.json | 38 +
.../core__cover__gradient.serialized.html | 5 +
.../blocks/core__cover__solid-color.html | 9 +
.../blocks/core__cover__solid-color.json | 30 +
.../core__cover__solid-color.parsed.json | 38 +
.../core__cover__solid-color.serialized.html | 5 +
.../blocks/core__navigation-link.html | 2 +
...u-item.json => core__navigation-link.json} | 6 +-
...json => core__navigation-link.parsed.json} | 4 +-
.../core__navigation-link.serialized.html | 1 +
.../blocks/core__navigation-menu-item.html | 2 -
...core__navigation-menu-item.serialized.html | 1 -
.../blocks/core__navigation-menu.html | 2 -
.../core__navigation-menu.serialized.html | 1 -
.../fixtures/blocks/core__navigation.html | 2 +
.../fixtures/blocks/core__navigation.json | 10 +
...rsed.json => core__navigation.parsed.json} | 2 +-
.../blocks/core__navigation.serialized.html | 1 +
.../fixtures/blocks/core__post-content.html | 1 +
.../fixtures/blocks/core__post-content.json | 10 +
.../blocks/core__post-content.parsed.json | 18 +
.../blocks/core__post-content.serialized.html | 1 +
.../fixtures/blocks/core__post-title.html | 1 +
.../fixtures/blocks/core__post-title.json | 10 +
.../blocks/core__post-title.parsed.json | 18 +
.../blocks/core__post-title.serialized.html | 1 +
.../blocks/core__pullquote__deprecated-3.html | 3 +
.../blocks/core__pullquote__deprecated-3.json | 15 +
.../core__pullquote__deprecated-3.parsed.json | 23 +
...e__pullquote__deprecated-3.serialized.html | 3 +
.../blocks/core__pullquote__main-color.html | 3 +
.../blocks/core__pullquote__main-color.json | 16 +
.../core__pullquote__main-color.parsed.json | 24 +
...ore__pullquote__main-color.serialized.html | 3 +
.../fixtures/blocks/core__site-title.html | 1 +
.../fixtures/blocks/core__site-title.json | 10 +
.../blocks/core__site-title.parsed.json | 18 +
.../blocks/core__site-title.serialized.html | 1 +
.../fixtures/blocks/core__table.json | 1 +
.../blocks/core__table.serialized.html | 2 +-
.../fixtures/blocks/core__table__caption.html | 3 +
.../fixtures/blocks/core__table__caption.json | 146 +
.../blocks/core__table__caption.parsed.json | 20 +
.../core__table__caption.serialized.html | 3 +
.../core__table__deprecated-1.serialized.html | 2 +-
.../blocks/core__table__scope-attribute.json | 1 +
...re__table__scope-attribute.serialized.html | 2 +-
.../fixtures/blocks/core__template-part.html | 1 +
...ion-menu.json => core__template-part.json} | 5 +-
.../blocks/core__template-part.parsed.json | 12 +
.../core__template-part.serialized.html | 1 +
packages/e2e-tests/jest.config.js | 2 +-
packages/e2e-tests/jest.performance.config.js | 2 +-
.../e2e-tests/mu-plugins/normalize-theme.php | 18 +
packages/e2e-tests/package.json | 3 +-
.../inner-blocks-locking-all-embed.php | 28 +
.../inner-blocks-locking-all-embed/index.js | 35 +
.../plugins/meta-attribute-block.php | 30 +-
.../block-transforms.test.js.snap | 531 --
.../e2e-tests/specs/block-transforms.test.js | 173 -
.../blocks/__snapshots__/table.test.js.snap | 49 -
.../blocks/__snapshots__/button.test.js.snap | 0
.../blocks/__snapshots__/classic.test.js.snap | 0
.../blocks/__snapshots__/code.test.js.snap | 0
.../blocks/__snapshots__/group.test.js.snap | 0
.../blocks/__snapshots__/heading.test.js.snap | 4 +-
.../blocks/__snapshots__/html.test.js.snap | 0
.../blocks/__snapshots__/list.test.js.snap | 24 +
.../__snapshots__/preformatted.test.js.snap | 8 +
.../blocks/__snapshots__/quote.test.js.snap | 0
.../__snapshots__/separator.test.js.snap | 0
.../blocks/__snapshots__/spacer.test.js.snap | 0
.../blocks/__snapshots__/table.test.js.snap | 55 +
.../specs/{ => editor}/blocks/button.test.js | 0
.../specs/{ => editor}/blocks/classic.test.js | 2 +-
.../specs/{ => editor}/blocks/code.test.js | 0
.../specs/{ => editor}/blocks/columns.test.js | 0
.../specs/{ => editor}/blocks/group.test.js | 0
.../specs/{ => editor}/blocks/heading.test.js | 8 +-
.../specs/{ => editor}/blocks/html.test.js | 0
.../specs/{ => editor}/blocks/list.test.js | 53 +
.../specs/editor/blocks/navigation.test.js | 29 +
.../{ => editor}/blocks/preformatted.test.js | 14 +
.../specs/{ => editor}/blocks/quote.test.js | 0
.../{ => editor}/blocks/separator.test.js | 0
.../specs/{ => editor}/blocks/spacer.test.js | 0
.../specs/{ => editor}/blocks/table.test.js | 29 +-
.../__snapshots__/align-hook.test.js.snap | 0
.../container-blocks.test.js.snap | 0
.../__snapshots__/cpt-locking.test.js.snap | 0
.../deprecated-node-matcher.test.js.snap | 0
.../__snapshots__/format-api.test.js.snap | 0
.../__snapshots__/hooks-api.test.js.snap | 0
.../meta-attribute-block.test.js.snap | 0
.../__snapshots__/plugins-api.test.js.snap | 7 +
.../__snapshots__/templates.test.js.snap | 0
.../wp-editor-meta-box.test.js.snap | 0
.../{ => editor}/plugins/align-hook.test.js | 0
.../plugins/allowed-blocks.test.js | 0
.../{ => editor}/plugins/annotations.test.js | 0
.../{ => editor}/plugins/block-icons.test.js | 0
.../plugins/container-blocks.test.js | 0
.../{ => editor}/plugins/cpt-locking.test.js | 0
.../plugins/custom-taxonomies.test.js | 0
.../plugins/deprecated-node-matcher.test.js | 0
.../{ => editor}/plugins/format-api.test.js | 0
.../{ => editor}/plugins/hooks-api.test.js | 0
.../inner-blocks-allowed-blocks.test.js | 0
.../plugins/innerblocks-locking-all-embed.js | 35 +
.../plugins/meta-attribute-block.test.js | 0
.../{ => editor}/plugins/meta-boxes.test.js | 0
.../specs/{ => editor}/plugins/nonce.test.js | 0
.../{ => editor}/plugins/plugins-api.test.js | 0
.../{ => editor}/plugins/templates.test.js | 0
.../plugins/wp-editor-meta-box.test.js | 9 +-
.../__snapshots__/adding-blocks.test.js.snap | 0
.../__snapshots__/block-deletion.test.js.snap | 0
.../__snapshots__/block-grouping.test.js.snap | 0
.../block-hierarchy-navigation.test.js.snap | 0
.../compatibility-classic-editor.test.js.snap | 0
.../convert-block-type.test.js.snap | 0
.../__snapshots__/embedding.test.js.snap | 0
.../font-size-picker.test.js.snap | 0
.../various}/__snapshots__/links.test.js.snap | 0
.../__snapshots__/mentions.test.js.snap | 0
.../multi-block-selection.test.js.snap | 34 +
.../reusable-blocks.test.js.snap | 0
.../__snapshots__/rich-text.test.js.snap | 44 +-
.../various}/__snapshots__/rtl.test.js.snap | 0
.../splitting-merging.test.js.snap | 10 +
.../style-variation.test.js.snap | 0
.../various}/__snapshots__/undo.test.js.snap | 0
.../__snapshots__/writing-flow.test.js.snap | 0
.../specs/{ => editor/various}/a11y.test.js | 0
.../various}/adding-blocks.test.js | 19 +-
.../various}/adding-inline-tokens.test.js | 2 +-
.../{ => editor/various}/autosave.test.js | 65 +-
.../various}/block-deletion.test.js | 0
.../various}/block-grouping.test.js | 0
.../block-hierarchy-navigation.test.js | 2 +-
.../{ => editor/various}/block-mover.test.js | 0
.../various}/block-switcher.test.js | 0
.../various}/change-detection.test.js | 102 +-
.../compatibility-classic-editor.test.js | 0
.../various}/convert-block-type.test.js | 0
.../{ => editor/various}/datepicker.test.js | 0
.../{ => editor/various}/editor-modes.test.js | 3 +-
.../{ => editor/various}/embedding.test.js | 150 +-
.../various}/font-size-picker.test.js | 17 +-
.../various}/fullscreen-mode.test.js | 0
.../various}/invalid-block.test.js | 0
.../keyboard-navigable-blocks.test.js | 3 +
.../specs/{ => editor/various}/links.test.js | 83 +-
.../various}/manage-reusable-blocks.test.js | 2 +-
.../{ => editor/various}/mentions.test.js | 0
.../various/multi-block-selection.test.js | 367 +
.../various}/navigable-toolbar.test.js | 0
.../various}/new-post-default-content.test.js | 0
.../{ => editor/various}/new-post.test.js | 0
.../specs/editor/various/nux.test.js | 105 +
.../{ => editor/various}/popovers.test.js | 0
.../editor/various/post-visibility.test.js | 66 +
.../{ => editor/various}/preferences.test.js | 0
.../{ => editor/various}/preview.test.js | 6 +-
.../various}/publish-button.test.js | 0
.../various}/publish-panel.test.js | 0
.../{ => editor/various}/publishing.test.js | 0
.../various}/reusable-blocks.test.js | 3 +
.../{ => editor/various}/rich-text.test.js | 54 +
.../specs/{ => editor/various}/rtl.test.js | 0
.../{ => editor/various}/scheduling.test.js | 0
.../various}/shortcut-help.test.js | 0
.../various}/sidebar-permalink-panel.test.js | 0
.../{ => editor/various}/sidebar.test.js | 20 +-
.../various}/splitting-merging.test.js | 12 +
.../various}/style-variation.test.js | 0
.../{ => editor/various}/taxonomies.test.js | 44 +-
.../{ => editor/various}/typewriter.test.js | 0
.../specs/{ => editor/various}/undo.test.js | 199 +-
.../{ => editor/various}/writing-flow.test.js | 0
.../e2e-tests/specs/{ => local}/demo.test.js | 0
.../specs/multi-block-selection.test.js | 206 -
packages/e2e-tests/specs/nux.test.js | 180 -
.../specs/{ => performance}/.gitignore | 0
.../{ => performance}/performance.test.js | 4 +-
.../__snapshots__/plugins-api.test.js.snap | 7 -
.../e2e-tests/specs/post-visibility.test.js | 31 -
packages/edit-post/CHANGELOG.md | 2 +-
packages/edit-post/README.md | 30 +-
packages/edit-post/package.json | 2 +-
.../plugin-block-settings-menu-item.js | 4 +-
.../src/components/browser-url/index.js | 9 +-
.../components/editor-initialization/index.js | 17 +-
.../editor-initialization/listener-hooks.js | 2 +-
.../test/listener-hooks.js | 5 +-
.../src/components/editor-regions/index.js | 72 +
.../src/components/editor-regions/style.scss | 143 +
.../components/header/header-toolbar/index.js | 37 +-
.../header/header-toolbar/style.scss | 6 +-
.../edit-post/src/components/header/index.js | 30 +-
.../test/__snapshots__/index.js.snap | 2 +-
.../header/pinned-plugins/style.scss | 19 +-
.../header/plugin-more-menu-item/index.js | 4 +-
.../plugin-sidebar-more-menu-item/index.js | 4 +-
.../header/post-publish-button-or-toggle.js | 10 +-
.../src/components/header/style.scss | 38 +-
.../header/test/__snapshots__/index.js.snap | 6 -
.../src/components/header/test/index.js | 5 -
.../components/header/writing-menu/index.js | 9 +-
.../keyboard-shortcut-help-modal/style.scss | 2 +-
.../edit-post/src/components/layout/index.js | 215 +-
.../src/components/layout/index.native.js | 5 +-
.../src/components/layout/style.scss | 171 +-
.../meta-boxes/meta-boxes-area/style.scss | 18 +
.../src/components/options-modal/index.js | 2 -
.../options-modal/options/deferred.js | 36 -
.../options-modal/options/enable-tips.js | 27 -
.../components/options-modal/options/index.js | 1 -
.../test/__snapshots__/index.js.snap | 3 -
.../edit-post/src/components/sidebar/index.js | 9 +-
.../plugin-document-setting-panel/index.js | 4 +-
.../plugin-post-publish-panel/index.js | 4 +-
.../test/__snapshots__/index.js.snap | 2 +-
.../sidebar/plugin-post-status-info/index.js | 2 +-
.../sidebar/plugin-pre-publish-panel/index.js | 17 +-
.../test/__snapshots__/index.js.snap | 2 +-
.../sidebar/plugin-sidebar/index.js | 13 +-
.../src/components/sidebar/post-link/index.js | 3 +-
.../components/sidebar/post-schedule/index.js | 1 -
.../sidebar/post-schedule/style.scss | 8 -
.../src/components/sidebar/post-slug/index.js | 17 +
.../components/sidebar/post-slug/style.scss | 4 +
.../components/sidebar/post-status/index.js | 2 +
.../sidebar/post-visibility/index.js | 1 -
.../sidebar/settings-header/index.js | 11 +-
.../sidebar/settings-header/style.scss | 7 +-
.../sidebar/settings-sidebar/index.js | 13 +-
.../sidebar/settings-sidebar/style.scss | 25 -
.../src/components/sidebar/style.scss | 49 +-
.../src/components/text-editor/style.scss | 81 +-
.../visual-editor/style.native.scss | 4 +-
.../src/components/visual-editor/style.scss | 40 +-
.../src/components/welcome-guide/images.js | 36 +
.../src/components/welcome-guide/index.js | 71 +
.../src/components/welcome-guide/style.scss | 49 +
packages/edit-post/src/editor.native.js | 3 +-
.../src/hooks/validate-multiple-use/index.js | 4 +-
packages/edit-post/src/index.js | 23 +
.../plugins/copy-content-menu-item/index.js | 2 +-
packages/edit-post/src/plugins/index.js | 2 +
.../plugins/welcome-guide-menu-item/index.js | 16 +
packages/edit-post/src/store/selectors.js | 4 +-
packages/edit-post/src/style.scss | 15 +-
packages/edit-post/src/test/editor.native.js | 1 +
packages/edit-widgets/package.json | 2 +-
.../index.js | 8 +-
.../src/components/layout/index.js | 38 +-
.../src/components/notices/index.js | 2 +-
.../src/components/sidebar/style.scss | 2 +-
.../src/components/widget-area/index.js | 73 +-
.../src/components/widget-area/style.scss | 10 +-
.../src/components/widget-areas/index.js | 13 +-
packages/editor/package.json | 2 +-
.../src/components/autocompleters/block.js | 10 +-
.../src/components/autocompleters/user.js | 4 +-
.../src/components/editor-notices/style.scss | 3 +-
packages/editor/src/components/index.js | 2 +
.../local-autosave-monitor/index.js | 13 +-
.../components/post-featured-image/index.js | 90 +-
.../components/post-featured-image/style.scss | 12 +-
.../components/post-preview-button/index.js | 4 -
.../test/__snapshots__/index.js.snap | 10 -
.../components/post-publish-button/index.js | 24 +-
.../components/post-publish-panel/index.js | 1 -
.../components/post-publish-panel/style.scss | 15 +-
.../test/__snapshots__/index.js.snap | 9 -
.../test/__snapshots__/index.js.snap | 2 +-
.../editor/src/components/post-slug/check.js | 10 +
.../editor/src/components/post-slug/index.js | 85 +
.../src/components/post-slug/test/check.js | 21 +
.../src/components/post-slug/test/index.js | 45 +
.../post-switch-to-draft-button/index.js | 7 +-
.../post-taxonomies/flat-term-selector.js | 6 +-
.../editor/src/components/post-title/index.js | 6 +-
.../src/components/post-title/index.native.js | 29 +-
.../components/post-title/style.native.scss | 4 +
.../src/components/post-title/style.scss | 10 -
.../post-type-support-check/index.js | 14 +-
.../editor/src/components/provider/index.js | 81 +-
.../src/components/provider/index.native.js | 5 +-
.../components/table-of-contents/style.scss | 2 +-
.../unsaved-changes-warning/index.js | 10 +-
packages/editor/src/editor-styles.scss | 2 +
.../custom-sources-backwards-compatibility.js | 124 +-
packages/editor/src/store/actions.js | 55 +-
packages/editor/src/store/actions.native.js | 4 +-
.../editor/src/store/effects/test/utils.js | 48 -
packages/editor/src/store/effects/utils.js | 33 -
packages/editor/src/store/reducer.js | 8 +-
packages/editor/src/store/selectors.js | 31 +
packages/editor/src/store/test/actions.js | 35 +
.../editor/src/store/utils/notice-builder.js | 4 +-
.../src/store/utils/test/notice-builder.js | 8 +-
packages/editor/src/utils/index.native.js | 6 +
.../src/utils/media-upload/index.native.js | 1 +
packages/element/CHANGELOG.md | 4 +
packages/element/README.md | 41 +-
packages/element/package.json | 3 +-
.../element/src/create-interpolate-element.js | 325 +
packages/element/src/index.js | 2 +
packages/element/src/platform.android.js | 19 +
packages/element/src/platform.ios.js | 19 +
packages/element/src/platform.js | 32 +
packages/element/src/raw-html.js | 2 +-
packages/element/src/react-platform.js | 14 +-
packages/element/src/react.js | 30 +-
.../src/test/create-interpolate-element.js | 245 +
packages/element/src/test/platform.js | 19 +
packages/element/src/test/platform.native.js | 19 +
packages/env/.npmrc | 1 +
packages/env/README.md | 45 +-
packages/env/lib/cli.js | 4 +-
.../env/lib/create-docker-compose-config.js | 32 +-
packages/env/lib/detect-context.js | 67 +
packages/env/lib/env.js | 80 +-
packages/env/lib/resolve-dependencies.js | 50 +
packages/env/package.json | 3 +-
.../env/{tests/cli.test.js => test/cli.js} | 0
packages/escape-html/README.md | 14 +
packages/escape-html/package.json | 3 +-
packages/escape-html/src/index.js | 13 +
packages/escape-html/src/test/index.js | 9 +
packages/eslint-plugin/CHANGELOG.md | 6 +
packages/eslint-plugin/configs/jsdoc.js | 38 +
packages/eslint-plugin/configs/react.js | 1 +
packages/eslint-plugin/package.json | 2 +-
packages/format-library/package.json | 2 +-
packages/format-library/src/image/index.js | 28 +-
packages/format-library/src/image/style.scss | 15 +-
.../format-library/src/link/index.native.js | 20 +-
packages/format-library/src/link/inline.js | 20 +-
packages/i18n/package.json | 2 +-
packages/is-shallow-equal/package.json | 3 +-
packages/jest-console/package.json | 2 +-
packages/jest-preset-default/CHANGELOG.md | 2 -
packages/jest-preset-default/jest-preset.js | 31 +
packages/jest-preset-default/jest-preset.json | 31 -
packages/jest-preset-default/package.json | 3 +-
.../scripts/travis-fold-passes-reporter.js | 42 +
packages/jest-puppeteer-axe/README.md | 6 +-
packages/jest-puppeteer-axe/package.json | 3 +-
packages/jest-puppeteer-axe/src/index.js | 22 +-
packages/keycodes/package.json | 3 +-
.../package.json | 2 +-
packages/list-reusable-blocks/package.json | 2 +-
.../src/components/import-dropdown/index.js | 1 -
packages/media-utils/package.json | 2 +-
.../src/components/media-upload/index.js | 3 -
packages/notices/package.json | 2 +-
packages/notices/src/store/actions.js | 11 +
packages/notices/src/store/selectors.js | 13 +-
packages/nux/package.json | 2 +-
packages/nux/src/components/dot-tip/index.js | 16 +-
.../nux/src/components/dot-tip/style.scss | 30 +-
.../dot-tip/test/__snapshots__/index.js.snap | 2 +-
packages/nux/src/store/selectors.js | 4 +-
packages/plugins/README.md | 16 +-
packages/plugins/package.json | 2 +-
packages/plugins/src/api/index.js | 30 +-
.../src/components/plugin-area/index.js | 2 +-
.../src/components/plugin-context/index.js | 2 +-
packages/priority-queue/package.json | 3 +-
packages/redux-routine/package.json | 3 +-
packages/rich-text/README.md | 8 +-
packages/rich-text/package.json | 2 +-
.../rich-text/src/can-indent-list-items.js | 29 +
.../rich-text/src/can-outdent-list-items.js | 18 +
packages/rich-text/src/component/aria.js | 27 -
packages/rich-text/src/component/editable.js | 109 -
.../rich-text/src/component/format-edit.js | 2 +-
packages/rich-text/src/component/index.js | 257 +-
.../rich-text/src/component/index.native.js | 341 +-
.../rich-text/src/component/style.native.scss | 1 -
.../rich-text/src/component/test/index.js | 116 -
.../src/component/test/index.native.js | 36 +-
packages/rich-text/src/create.js | 66 +-
packages/rich-text/src/indent-list-items.js | 18 +-
packages/rich-text/src/index.js | 2 +
packages/rich-text/src/outdent-list-items.js | 9 +-
.../rich-text/src/register-format-type.js | 19 +-
.../src/test/__snapshots__/to-dom.js.snap | 40 +
.../src/test/can-indent-list-items.js | 51 +
.../src/test/can-outdent-list-items.js | 39 +
packages/rich-text/src/test/helpers/index.js | 40 +-
packages/rich-text/src/to-dom.js | 2 +-
packages/rich-text/src/to-html-string.js | 15 +-
packages/rich-text/src/to-tree.js | 23 +-
.../rich-text/src/unregister-format-type.js | 2 +
packages/scripts/CHANGELOG.md | 9 +-
packages/scripts/README.md | 4 +-
packages/scripts/config/jest-e2e.config.js | 16 +-
packages/scripts/package.json | 8 +-
packages/scripts/scripts/lint-pkg-json.js | 2 +
packages/server-side-render/README.md | 2 +-
packages/server-side-render/package.json | 2 +-
packages/shortcode/package.json | 2 +-
packages/token-list/package.json | 2 +-
packages/token-list/src/index.js | 10 +-
packages/url/package.json | 3 +-
packages/url/src/add-query-args.js | 44 +
packages/url/src/filter-url-for-display.js | 23 +
packages/url/src/get-authority.js | 19 +
packages/url/src/get-fragment.js | 19 +
packages/url/src/get-path.js | 19 +
packages/url/src/get-protocol.js | 19 +
packages/url/src/get-query-arg.js | 32 +
packages/url/src/get-query-string.js | 19 +
packages/url/src/has-query-arg.js | 21 +
packages/url/src/index.js | 450 +-
packages/url/src/is-email.js | 17 +
packages/url/src/is-url.js | 17 +
packages/url/src/is-valid-authority.js | 19 +
packages/url/src/is-valid-fragment.js | 19 +
packages/url/src/is-valid-path.js | 19 +
packages/url/src/is-valid-protocol.js | 19 +
packages/url/src/is-valid-query-string.js | 19 +
packages/url/src/prepend-http.js | 31 +
packages/url/src/remove-query-args.js | 27 +
packages/url/src/safe-decode-uri-component.js | 15 +
packages/url/src/safe-decode-uri.js | 20 +
packages/viewport/package.json | 2 +-
packages/viewport/src/index.js | 47 +-
packages/viewport/src/index.native.js | 8 -
packages/viewport/src/listener.js | 50 +
packages/viewport/src/listener.native.js | 42 +
.../viewport/src/test/if-viewport-matches.js | 21 +-
.../viewport/src/test/with-viewport-match.js | 35 +-
packages/viewport/src/with-viewport-match.js | 39 +-
packages/wordcount/package.json | 3 +-
phpcs.xml.dist | 2 +-
phpunit/class-override-script-test.php | 16 +-
playground/.babelrc | 9 -
playground/src/index.html | 13 -
playground/src/index.js | 73 -
playground/src/style.scss | 53 -
readme.txt | 210 +
storybook/.babelrc | 12 +
storybook/.sassrc | 5 +
storybook/README.md | 15 +
.../storybook => storybook}/addons.js | 2 +
storybook/config.js | 30 +
.../storybook => storybook}/presets.js | 0
storybook/preview-head.html | 1 +
.../stories}/docs/introduction.story.mdx | 2 +-
.../stories/playground}/editor-styles.scss | 0
storybook/stories/playground/index.js | 69 +
.../stories/playground}/reset.scss | 0
storybook/stories/playground/style.scss | 63 +
storybook/style.scss | 16 +
storybook/test/__snapshots__/index.js.snap | 3979 +++++++++
storybook/test/index.js | 29 +
storybook/webpack.config.js | 34 +
.../blocks-raw-handling.test.js.snap | 44 +
test/integration/blocks-raw-handling.test.js | 77 +-
test/integration/fixtures/apple-out.html | 22 +-
test/integration/fixtures/classic-out.html | 2 +-
test/integration/fixtures/evernote-out.html | 12 +-
.../fixtures/google-docs-blank-lines.html | 1 +
.../integration/fixtures/google-docs-out.html | 8 +-
.../fixtures/google-docs-table-out.html | 2 +-
.../google-docs-table-with-comments-out.html | 2 +-
.../google-docs-with-comments-out.html | 8 +-
.../inline-with-html-formatting-space.html | 11 +
.../fixtures/list-with-attributes.html | 7 +
test/integration/fixtures/markdown-out.html | 7 +-
.../fixtures/ms-word-online-out.html | 2 +-
test/integration/fixtures/ms-word-out.html | 30 +-
.../fixtures/ms-word-styled-out.html | 12 +-
test/integration/fixtures/plain-out.html | 2 +-
.../fixtures/shortcode-matching-in.html | 3 +
.../fixtures/shortcode-matching-out.html | 7 +
test/integration/fixtures/windows.html | 10 +
.../full-content/full-content.test.js | 5 +-
.../full-content/server-registered.json | 2 +-
test/integration/shortcode-converter.test.js | 130 +-
test/native/__mocks__/styleMock.js | 6 +
test/native/jest.config.js | 4 +-
test/native/setup.js | 12 +-
test/unit/config/global-mocks.js | 6 +
test/unit/config/register-context.js | 6 +
test/unit/jest.config.js | 2 +
tsconfig.json | 3 +-
1278 files changed, 45456 insertions(+), 15769 deletions(-)
create mode 100644 .npmpackagejsonlintrc.json
create mode 100644 changelog.txt
create mode 100644 docs/contributors/native-mobile.md
create mode 100644 docs/designers-developers/developers/themes/block-based-themes.md
create mode 100644 lib/block-directory.php
rename lib/{class-wp-rest-widget-updater-controller.php => class-wp-rest-widget-forms.php} (69%)
create mode 100644 lib/demo-block-templates/index.html
create mode 100644 lib/template-canvas.php
create mode 100644 lib/template-loader.php
create mode 100644 lib/template-parts.php
delete mode 100644 packages/api-fetch/src/index.native.js
create mode 100644 packages/api-fetch/src/middlewares/media-upload.js
create mode 100644 packages/api-fetch/src/utils/response.js
create mode 100644 packages/base-styles/.npmrc
create mode 100644 packages/base-styles/README.md
rename {assets/stylesheets => packages/base-styles}/_animations.scss (100%)
rename {assets/stylesheets => packages/base-styles}/_breakpoints.scss (100%)
rename {assets/stylesheets => packages/base-styles}/_colors.scss (100%)
rename {assets/stylesheets => packages/base-styles}/_mixins.scss (98%)
rename {assets/stylesheets => packages/base-styles}/_variables.scss (78%)
rename {assets/stylesheets => packages/base-styles}/_z-index.scss (91%)
create mode 100644 packages/base-styles/index.js
create mode 100644 packages/base-styles/package.json
create mode 100644 packages/block-directory/src/plugins/index.js
rename packages/{editor/src/components => block-directory/src/plugins}/inserter-menu-downloadable-blocks-panel/index.js (89%)
delete mode 100644 packages/block-editor/src/components/alignment-toolbar/index.native.js
create mode 100644 packages/block-editor/src/components/autocomplete/index.native.js
create mode 100644 packages/block-editor/src/components/block-breadcrumb/index.js
create mode 100644 packages/block-editor/src/components/block-breadcrumb/style.scss
create mode 100644 packages/block-editor/src/components/block-list-footer/index.js
delete mode 100644 packages/block-editor/src/components/block-list/block-mobile-toolbar.js
create mode 100644 packages/block-editor/src/components/block-list/breadcrumb.native.js
create mode 100644 packages/block-editor/src/components/block-list/breadcrumb.native.scss
create mode 100644 packages/block-editor/src/components/block-list/subdirectory-icon.js
delete mode 100644 packages/block-editor/src/components/block-list/test/block-html.js
create mode 100644 packages/block-editor/src/components/block-list/use-multi-selection.js
create mode 100644 packages/block-editor/src/components/block-mobile-toolbar/index.js
rename packages/block-editor/src/components/{block-list/block-mobile-toolbar.native.js => block-mobile-toolbar/index.native.js} (96%)
rename packages/block-editor/src/components/{block-list/block-mobile-toolbar.native.scss => block-mobile-toolbar/style.native.scss} (100%)
create mode 100644 packages/block-editor/src/components/block-mobile-toolbar/style.scss
delete mode 100644 packages/block-editor/src/components/block-mover/drag-handle.js
create mode 100644 packages/block-editor/src/components/block-pattern-picker/index.js
create mode 100644 packages/block-editor/src/components/block-pattern-picker/style.scss
create mode 100644 packages/block-editor/src/components/block-settings/container.native.scss
delete mode 100644 packages/block-editor/src/components/color-palette/control.scss
create mode 100644 packages/block-editor/src/components/colors/use-colors.js
delete mode 100644 packages/block-editor/src/components/gradient-picker/control.scss
create mode 100644 packages/block-editor/src/components/gradient-picker/panel.js
create mode 100644 packages/block-editor/src/components/gradients/index.js
delete mode 100644 packages/block-editor/src/components/inner-blocks/template-picker.js
create mode 100644 packages/block-editor/src/components/link-control/README.md
create mode 100644 packages/block-editor/src/components/link-control/index.js
create mode 100644 packages/block-editor/src/components/link-control/search-input.js
create mode 100644 packages/block-editor/src/components/link-control/search-item.js
create mode 100644 packages/block-editor/src/components/link-control/settings-drawer.js
create mode 100644 packages/block-editor/src/components/link-control/style.scss
create mode 100644 packages/block-editor/src/components/link-control/test/__snapshots__/index.js.snap
create mode 100644 packages/block-editor/src/components/link-control/test/fixtures/index.js
create mode 100644 packages/block-editor/src/components/link-control/test/index.js
create mode 100644 packages/block-editor/src/components/media-replace-flow/index.js
create mode 100644 packages/block-editor/src/components/media-replace-flow/style.scss
create mode 100644 packages/block-editor/src/components/page-template-picker/button.js
create mode 100644 packages/block-editor/src/components/page-template-picker/button.native.js
create mode 100644 packages/block-editor/src/components/page-template-picker/container.js
create mode 100644 packages/block-editor/src/components/page-template-picker/container.native.js
create mode 100644 packages/block-editor/src/components/page-template-picker/default-templates.js
create mode 100644 packages/block-editor/src/components/page-template-picker/index.js
create mode 100644 packages/block-editor/src/components/page-template-picker/picker.js
create mode 100644 packages/block-editor/src/components/page-template-picker/use-page-template-picker-visible.js
create mode 100644 packages/block-editor/src/components/page-template-picker/with-page-template-picker-visible.js
create mode 100644 packages/block-editor/src/components/responsive-block-control/README.md
create mode 100644 packages/block-editor/src/components/responsive-block-control/index.js
create mode 100644 packages/block-editor/src/components/responsive-block-control/label.js
create mode 100644 packages/block-editor/src/components/responsive-block-control/style.scss
create mode 100644 packages/block-editor/src/components/responsive-block-control/test/__snapshots__/index.js.snap
create mode 100644 packages/block-editor/src/components/responsive-block-control/test/index.js
create mode 100644 packages/block-editor/src/components/rich-text/file-paste-handler.js
create mode 100644 packages/block-editor/src/components/rich-text/file-paste-handler.native.js
create mode 100644 packages/block-editor/src/components/rich-text/format-toolbar-container.js
create mode 100644 packages/block-editor/src/components/rich-text/format-toolbar-container.native.js
delete mode 100644 packages/block-editor/src/components/rich-text/index.native.js
create mode 100644 packages/block-editor/src/components/rich-text/remove-browser-shortcuts.native.js
create mode 100644 packages/block-editor/src/components/tool-selector/index.js
create mode 100644 packages/block-editor/src/components/tool-selector/style.scss
rename packages/{block-library/src/video => block-editor/src/components/video-player}/gridicon-play.native.js (100%)
rename packages/{block-library/src/video/video-player.native.js => block-editor/src/components/video-player/index.native.js} (96%)
rename packages/{block-library/src/video/video-player.native.scss => block-editor/src/components/video-player/styles.native.scss} (100%)
create mode 100644 packages/block-editor/src/utils/get-paste-event-data.js
delete mode 100644 packages/block-library/src/block/indicator/editor.scss
delete mode 100644 packages/block-library/src/block/indicator/index.js
create mode 100644 packages/block-library/src/column/edit.native.js
create mode 100644 packages/block-library/src/column/editor.native.scss
create mode 100644 packages/block-library/src/columns/edit.native.js
create mode 100644 packages/block-library/src/columns/editor.native.scss
create mode 100644 packages/block-library/src/columns/patterns.js
create mode 100644 packages/block-library/src/gallery/gallery-button.native.js
create mode 100644 packages/block-library/src/gallery/gallery-image-style.native.scss
create mode 100644 packages/block-library/src/gallery/gallery-image.native.js
create mode 100644 packages/block-library/src/gallery/gallery-styles.native.scss
create mode 100644 packages/block-library/src/gallery/gallery.js
create mode 100644 packages/block-library/src/gallery/gallery.native.js
create mode 100644 packages/block-library/src/gallery/shared-icon.js
create mode 100644 packages/block-library/src/gallery/shared-icon.native.js
create mode 100644 packages/block-library/src/gallery/styles.native.scss
create mode 100644 packages/block-library/src/gallery/tiles-styles.native.scss
create mode 100644 packages/block-library/src/gallery/tiles.native.js
delete mode 100644 packages/block-library/src/list/editor.scss
delete mode 100644 packages/block-library/src/list/ordered-list-settings.native.js
create mode 100644 packages/block-library/src/media-text/icon-retry.native.js
create mode 100644 packages/block-library/src/missing/test/__snapshots__/edit.native.js.snap
create mode 100644 packages/block-library/src/missing/test/edit.native.js
rename packages/block-library/src/{navigation-menu-item => navigation-link}/block.json (73%)
create mode 100644 packages/block-library/src/navigation-link/edit.js
create mode 100644 packages/block-library/src/navigation-link/editor.scss
create mode 100644 packages/block-library/src/navigation-link/index.js
rename packages/block-library/src/{navigation-menu-item => navigation-link}/save.js (100%)
delete mode 100644 packages/block-library/src/navigation-menu-item/edit.js
delete mode 100644 packages/block-library/src/navigation-menu-item/editor.scss
delete mode 100644 packages/block-library/src/navigation-menu-item/menu-item-actions.js
delete mode 100644 packages/block-library/src/navigation-menu/edit.js
delete mode 100644 packages/block-library/src/navigation-menu/editor.scss
delete mode 100644 packages/block-library/src/navigation-menu/index.php
create mode 100644 packages/block-library/src/navigation/block-colors-selector.js
create mode 100644 packages/block-library/src/navigation/block-navigation-list.js
create mode 100644 packages/block-library/src/navigation/edit.js
create mode 100644 packages/block-library/src/navigation/editor.scss
create mode 100644 packages/block-library/src/navigation/icons.js
rename packages/block-library/src/{navigation-menu => navigation}/index.js (59%)
create mode 100644 packages/block-library/src/navigation/index.php
rename packages/block-library/src/{navigation-menu => navigation}/save.js (100%)
create mode 100644 packages/block-library/src/navigation/style.scss
create mode 100644 packages/block-library/src/navigation/theme.scss
rename packages/block-library/src/{navigation-menu => navigation}/use-block-navigator.js (61%)
create mode 100644 packages/block-library/src/post-content/block.json
create mode 100644 packages/block-library/src/post-content/edit.js
create mode 100644 packages/block-library/src/post-content/icon.js
rename packages/block-library/src/{navigation-menu-item => post-content}/index.js (54%)
create mode 100644 packages/block-library/src/post-content/index.php
create mode 100644 packages/block-library/src/post-title/block.json
create mode 100644 packages/block-library/src/post-title/edit.js
create mode 100644 packages/block-library/src/post-title/icon.js
create mode 100644 packages/block-library/src/post-title/index.js
create mode 100644 packages/block-library/src/post-title/index.php
create mode 100644 packages/block-library/src/preformatted/edit.native.js
create mode 100644 packages/block-library/src/preformatted/styles.native.scss
create mode 100644 packages/block-library/src/site-title/block.json
create mode 100644 packages/block-library/src/site-title/edit.js
create mode 100644 packages/block-library/src/site-title/editor.scss
create mode 100644 packages/block-library/src/site-title/icon.js
create mode 100644 packages/block-library/src/site-title/index.js
create mode 100644 packages/block-library/src/site-title/index.php
create mode 100644 packages/block-library/src/spacer/edit.native.js
create mode 100644 packages/block-library/src/spacer/editor.native.scss
create mode 100644 packages/block-library/src/template-part/block.json
create mode 100644 packages/block-library/src/template-part/edit.js
create mode 100644 packages/block-library/src/template-part/index.js
create mode 100644 packages/block-library/src/template-part/index.php
create mode 100644 packages/block-library/src/video/edit-common-settings.js
delete mode 100644 packages/blocks/src/api/index.native.js
create mode 100644 packages/blocks/src/api/raw-handling/br-remover.js
create mode 100644 packages/blocks/src/api/raw-handling/empty-paragraph-remover.js
create mode 100644 packages/blocks/src/api/raw-handling/html-formatting-remover.js
create mode 100644 packages/blocks/src/api/raw-handling/test/html-formatting-remover.js
create mode 100644 packages/blocks/src/store/test/actions.js
create mode 100644 packages/components/src/animate/stories/index.js
create mode 100644 packages/components/src/base-control/stories/index.js
create mode 100644 packages/components/src/button-group/stories/index.js
create mode 100644 packages/components/src/card/README.md
create mode 100644 packages/components/src/card/body.js
create mode 100644 packages/components/src/card/context.js
create mode 100644 packages/components/src/card/divider.js
create mode 100644 packages/components/src/card/docs/body.md
create mode 100644 packages/components/src/card/docs/divider.md
create mode 100644 packages/components/src/card/docs/footer.md
create mode 100644 packages/components/src/card/docs/header.md
create mode 100644 packages/components/src/card/docs/media.md
create mode 100644 packages/components/src/card/footer.js
create mode 100644 packages/components/src/card/header.js
create mode 100644 packages/components/src/card/index.js
create mode 100644 packages/components/src/card/media.js
create mode 100644 packages/components/src/card/stories/_index.js
create mode 100644 packages/components/src/card/stories/_utils.js
create mode 100644 packages/components/src/card/stories/body.js
create mode 100644 packages/components/src/card/stories/divider.js
create mode 100644 packages/components/src/card/stories/footer.js
create mode 100644 packages/components/src/card/stories/header.js
create mode 100644 packages/components/src/card/stories/media.js
create mode 100644 packages/components/src/card/styles/card-styles.js
create mode 100644 packages/components/src/card/test/body.js
create mode 100644 packages/components/src/card/test/divider.js
create mode 100644 packages/components/src/card/test/footer.js
create mode 100644 packages/components/src/card/test/header.js
create mode 100644 packages/components/src/card/test/index.js
create mode 100644 packages/components/src/card/test/media.js
create mode 100644 packages/components/src/checkbox-control/stories/index.js
create mode 100644 packages/components/src/clipboard-button/stories/index.js
create mode 100644 packages/components/src/color-indicator/stories/index.js
create mode 100644 packages/components/src/color-palette/stories/index.js
create mode 100644 packages/components/src/color-picker/stories/index.js
create mode 100644 packages/components/src/custom-gradient-picker/constants.js
create mode 100644 packages/components/src/custom-gradient-picker/control-points.js
create mode 100644 packages/components/src/custom-gradient-picker/index.js
create mode 100644 packages/components/src/custom-gradient-picker/serializer.js
create mode 100644 packages/components/src/custom-gradient-picker/style.scss
create mode 100644 packages/components/src/custom-gradient-picker/test/serializer.js
create mode 100644 packages/components/src/custom-gradient-picker/utils.js
create mode 100644 packages/components/src/custom-select-control/index.js
create mode 100644 packages/components/src/custom-select-control/stories/index.js
create mode 100644 packages/components/src/custom-select-control/style.scss
create mode 100644 packages/components/src/dashicon/stories/index.js
create mode 100644 packages/components/src/dimension-control/README.md
create mode 100644 packages/components/src/dimension-control/index.js
create mode 100644 packages/components/src/dimension-control/sizes.js
create mode 100644 packages/components/src/dimension-control/style.scss
create mode 100644 packages/components/src/dimension-control/test/__snapshots__/index.test.js.snap
create mode 100644 packages/components/src/dimension-control/test/index.test.js
create mode 100644 packages/components/src/draggable/stories/index.js
create mode 100644 packages/components/src/dropdown/stories/index.js
create mode 100644 packages/components/src/dropdown/style.scss
create mode 100644 packages/components/src/external-link/stories/index.js
create mode 100644 packages/components/src/font-size-picker/stories/index.js
create mode 100644 packages/components/src/guide/README.md
create mode 100644 packages/components/src/guide/finish-button.js
create mode 100644 packages/components/src/guide/icons.js
create mode 100644 packages/components/src/guide/index.js
create mode 100644 packages/components/src/guide/page-control.js
create mode 100644 packages/components/src/guide/page.js
create mode 100644 packages/components/src/guide/stories/index.js
create mode 100644 packages/components/src/guide/style.scss
create mode 100644 packages/components/src/guide/test/finish-button.js
create mode 100644 packages/components/src/guide/test/index.js
create mode 100644 packages/components/src/guide/test/page-control.js
create mode 100644 packages/components/src/icon-button/stories/index.js
create mode 100644 packages/components/src/icon/stories/index.js
create mode 100644 packages/components/src/keyboard-shortcuts/index.native.js
create mode 100644 packages/components/src/menu-items-choice/style.scss
create mode 100644 packages/components/src/mobile/bottom-sheet/borderStyles.android.scss
create mode 100644 packages/components/src/mobile/bottom-sheet/borderStyles.ios.scss
create mode 100644 packages/components/src/mobile/bottom-sheet/range-cell.native.js
create mode 100644 packages/components/src/mobile/bottom-sheet/range-cell.native.scss
create mode 100644 packages/components/src/modal/stories/index.js
create mode 100644 packages/components/src/panel/actions.native.js
create mode 100644 packages/components/src/panel/actions.native.scss
create mode 100644 packages/components/src/panel/body.native.scss
create mode 100644 packages/components/src/popover/stories/_utils.js
create mode 100644 packages/components/src/popover/stories/index.js
create mode 100644 packages/components/src/radio-control/stories/index.js
create mode 100644 packages/components/src/range-control/index.native.js
create mode 100644 packages/components/src/range-control/stories/index.js
create mode 100644 packages/components/src/resizable-box/stories/index.js
create mode 100644 packages/components/src/scroll-lock/stories/index.js
create mode 100644 packages/components/src/snackbar/stories/index.js
create mode 100644 packages/components/src/spinner/stories/index.js
create mode 100644 packages/components/src/tab-panel/stories/index.js
create mode 100644 packages/components/src/text-highlight/README.md
create mode 100644 packages/components/src/text-highlight/index.js
create mode 100644 packages/components/src/text-highlight/stories/index.js
create mode 100644 packages/components/src/text-highlight/test/index.js
create mode 100644 packages/components/src/tip/stories/index.js
create mode 100644 packages/components/src/toggle-control/stories/index.js
create mode 100644 packages/components/src/toolbar-button/accessible-toolbar-button-container.js
create mode 100644 packages/components/src/toolbar-button/accessible-toolbar-button-container.native.js
create mode 100644 packages/components/src/toolbar-context/index.js
create mode 100644 packages/components/src/toolbar-group/index.js
create mode 100644 packages/components/src/toolbar-group/stories/index.js
create mode 100644 packages/components/src/toolbar-group/style.native.scss
create mode 100644 packages/components/src/toolbar-group/style.scss
create mode 100644 packages/components/src/toolbar-group/test/index.js
create mode 100644 packages/components/src/toolbar-group/toolbar-group-collapsed.js
create mode 100644 packages/components/src/toolbar-group/toolbar-group-collapsed.native.js
create mode 100644 packages/components/src/toolbar-group/toolbar-group-container.js
create mode 100644 packages/components/src/toolbar-group/toolbar-group-container.native.js
create mode 100644 packages/components/src/toolbar/stories/index.js
create mode 100644 packages/components/src/utils/colors-values.js
create mode 100644 packages/components/src/utils/colors.js
create mode 100644 packages/components/src/visually-hidden/README.md
create mode 100644 packages/components/src/visually-hidden/index.js
create mode 100644 packages/components/src/visually-hidden/stories/index.js
create mode 100644 packages/components/src/visually-hidden/style.scss
create mode 100644 packages/components/src/visually-hidden/utils.js
delete mode 100644 packages/components/storybook/.babelrc
delete mode 100644 packages/components/storybook/config.js
create mode 100644 packages/compose/src/higher-order/compose.js
create mode 100644 packages/compose/src/hooks/use-media-query/test/index.js
create mode 100644 packages/compose/src/hooks/use-viewport-match/index.js
create mode 100644 packages/compose/src/hooks/use-viewport-match/test/index.js
rename packages/{e2e-test-utils/src/enable-experimental-features.js => e2e-tests/experimental-features.js} (60%)
create mode 100644 packages/e2e-tests/fixtures/blocks/core__cover__gradient-image.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__cover__gradient-image.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__cover__gradient-image.parsed.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__cover__gradient-image.serialized.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__cover__gradient-video.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__cover__gradient-video.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__cover__gradient-video.parsed.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__cover__gradient-video.serialized.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__cover__gradient.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__cover__gradient.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__cover__gradient.parsed.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__cover__gradient.serialized.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__cover__solid-color.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__cover__solid-color.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__cover__solid-color.parsed.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__cover__solid-color.serialized.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__navigation-link.html
rename packages/e2e-tests/fixtures/blocks/{core__navigation-menu-item.json => core__navigation-link.json} (63%)
rename packages/e2e-tests/fixtures/blocks/{core__navigation-menu-item.parsed.json => core__navigation-link.parsed.json} (77%)
create mode 100644 packages/e2e-tests/fixtures/blocks/core__navigation-link.serialized.html
delete mode 100644 packages/e2e-tests/fixtures/blocks/core__navigation-menu-item.html
delete mode 100644 packages/e2e-tests/fixtures/blocks/core__navigation-menu-item.serialized.html
delete mode 100644 packages/e2e-tests/fixtures/blocks/core__navigation-menu.html
delete mode 100644 packages/e2e-tests/fixtures/blocks/core__navigation-menu.serialized.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__navigation.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__navigation.json
rename packages/e2e-tests/fixtures/blocks/{core__navigation-menu.parsed.json => core__navigation.parsed.json} (87%)
create mode 100644 packages/e2e-tests/fixtures/blocks/core__navigation.serialized.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__post-content.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__post-content.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__post-content.parsed.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__post-content.serialized.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__post-title.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__post-title.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__post-title.parsed.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__post-title.serialized.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__pullquote__deprecated-3.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__pullquote__deprecated-3.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__pullquote__deprecated-3.parsed.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__pullquote__deprecated-3.serialized.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__pullquote__main-color.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__pullquote__main-color.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__pullquote__main-color.parsed.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__pullquote__main-color.serialized.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__site-title.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__site-title.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__site-title.parsed.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__site-title.serialized.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__table__caption.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__table__caption.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__table__caption.parsed.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__table__caption.serialized.html
create mode 100644 packages/e2e-tests/fixtures/blocks/core__template-part.html
rename packages/e2e-tests/fixtures/blocks/{core__navigation-menu.json => core__template-part.json} (61%)
create mode 100644 packages/e2e-tests/fixtures/blocks/core__template-part.parsed.json
create mode 100644 packages/e2e-tests/fixtures/blocks/core__template-part.serialized.html
create mode 100644 packages/e2e-tests/mu-plugins/normalize-theme.php
create mode 100644 packages/e2e-tests/plugins/inner-blocks-locking-all-embed.php
create mode 100644 packages/e2e-tests/plugins/inner-blocks-locking-all-embed/index.js
delete mode 100644 packages/e2e-tests/specs/__snapshots__/block-transforms.test.js.snap
delete mode 100644 packages/e2e-tests/specs/block-transforms.test.js
delete mode 100644 packages/e2e-tests/specs/blocks/__snapshots__/table.test.js.snap
rename packages/e2e-tests/specs/{ => editor}/blocks/__snapshots__/button.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor}/blocks/__snapshots__/classic.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor}/blocks/__snapshots__/code.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor}/blocks/__snapshots__/group.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor}/blocks/__snapshots__/heading.test.js.snap (89%)
rename packages/e2e-tests/specs/{ => editor}/blocks/__snapshots__/html.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor}/blocks/__snapshots__/list.test.js.snap (92%)
rename packages/e2e-tests/specs/{ => editor}/blocks/__snapshots__/preformatted.test.js.snap (65%)
rename packages/e2e-tests/specs/{ => editor}/blocks/__snapshots__/quote.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor}/blocks/__snapshots__/separator.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor}/blocks/__snapshots__/spacer.test.js.snap (100%)
create mode 100644 packages/e2e-tests/specs/editor/blocks/__snapshots__/table.test.js.snap
rename packages/e2e-tests/specs/{ => editor}/blocks/button.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/blocks/classic.test.js (95%)
rename packages/e2e-tests/specs/{ => editor}/blocks/code.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/blocks/columns.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/blocks/group.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/blocks/heading.test.js (90%)
rename packages/e2e-tests/specs/{ => editor}/blocks/html.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/blocks/list.test.js (89%)
create mode 100644 packages/e2e-tests/specs/editor/blocks/navigation.test.js
rename packages/e2e-tests/specs/{ => editor}/blocks/preformatted.test.js (65%)
rename packages/e2e-tests/specs/{ => editor}/blocks/quote.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/blocks/separator.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/blocks/spacer.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/blocks/table.test.js (92%)
rename packages/e2e-tests/specs/{ => editor}/plugins/__snapshots__/align-hook.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/__snapshots__/container-blocks.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/__snapshots__/cpt-locking.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/__snapshots__/deprecated-node-matcher.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/__snapshots__/format-api.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/__snapshots__/hooks-api.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/__snapshots__/meta-attribute-block.test.js.snap (100%)
create mode 100644 packages/e2e-tests/specs/editor/plugins/__snapshots__/plugins-api.test.js.snap
rename packages/e2e-tests/specs/{ => editor}/plugins/__snapshots__/templates.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/__snapshots__/wp-editor-meta-box.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/align-hook.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/allowed-blocks.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/annotations.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/block-icons.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/container-blocks.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/cpt-locking.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/custom-taxonomies.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/deprecated-node-matcher.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/format-api.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/hooks-api.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/inner-blocks-allowed-blocks.test.js (100%)
create mode 100644 packages/e2e-tests/specs/editor/plugins/innerblocks-locking-all-embed.js
rename packages/e2e-tests/specs/{ => editor}/plugins/meta-attribute-block.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/meta-boxes.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/nonce.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/plugins-api.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/templates.test.js (100%)
rename packages/e2e-tests/specs/{ => editor}/plugins/wp-editor-meta-box.test.js (76%)
rename packages/e2e-tests/specs/{ => editor/various}/__snapshots__/adding-blocks.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor/various}/__snapshots__/block-deletion.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor/various}/__snapshots__/block-grouping.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor/various}/__snapshots__/block-hierarchy-navigation.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor/various}/__snapshots__/compatibility-classic-editor.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor/various}/__snapshots__/convert-block-type.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor/various}/__snapshots__/embedding.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor/various}/__snapshots__/font-size-picker.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor/various}/__snapshots__/links.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor/various}/__snapshots__/mentions.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor/various}/__snapshots__/multi-block-selection.test.js.snap (50%)
rename packages/e2e-tests/specs/{ => editor/various}/__snapshots__/reusable-blocks.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor/various}/__snapshots__/rich-text.test.js.snap (76%)
rename packages/e2e-tests/specs/{ => editor/various}/__snapshots__/rtl.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor/various}/__snapshots__/splitting-merging.test.js.snap (91%)
rename packages/e2e-tests/specs/{ => editor/various}/__snapshots__/style-variation.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor/various}/__snapshots__/undo.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor/various}/__snapshots__/writing-flow.test.js.snap (100%)
rename packages/e2e-tests/specs/{ => editor/various}/a11y.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/adding-blocks.test.js (89%)
rename packages/e2e-tests/specs/{ => editor/various}/adding-inline-tokens.test.js (93%)
rename packages/e2e-tests/specs/{ => editor/various}/autosave.test.js (77%)
rename packages/e2e-tests/specs/{ => editor/various}/block-deletion.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/block-grouping.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/block-hierarchy-navigation.test.js (97%)
rename packages/e2e-tests/specs/{ => editor/various}/block-mover.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/block-switcher.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/change-detection.test.js (82%)
rename packages/e2e-tests/specs/{ => editor/various}/compatibility-classic-editor.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/convert-block-type.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/datepicker.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/editor-modes.test.js (97%)
rename packages/e2e-tests/specs/{ => editor/various}/embedding.test.js (71%)
rename packages/e2e-tests/specs/{ => editor/various}/font-size-picker.test.js (84%)
rename packages/e2e-tests/specs/{ => editor/various}/fullscreen-mode.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/invalid-block.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/keyboard-navigable-blocks.test.js (98%)
rename packages/e2e-tests/specs/{ => editor/various}/links.test.js (80%)
rename packages/e2e-tests/specs/{ => editor/various}/manage-reusable-blocks.test.js (93%)
rename packages/e2e-tests/specs/{ => editor/various}/mentions.test.js (100%)
create mode 100644 packages/e2e-tests/specs/editor/various/multi-block-selection.test.js
rename packages/e2e-tests/specs/{ => editor/various}/navigable-toolbar.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/new-post-default-content.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/new-post.test.js (100%)
create mode 100644 packages/e2e-tests/specs/editor/various/nux.test.js
rename packages/e2e-tests/specs/{ => editor/various}/popovers.test.js (100%)
create mode 100644 packages/e2e-tests/specs/editor/various/post-visibility.test.js
rename packages/e2e-tests/specs/{ => editor/various}/preferences.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/preview.test.js (98%)
rename packages/e2e-tests/specs/{ => editor/various}/publish-button.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/publish-panel.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/publishing.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/reusable-blocks.test.js (98%)
rename packages/e2e-tests/specs/{ => editor/various}/rich-text.test.js (82%)
rename packages/e2e-tests/specs/{ => editor/various}/rtl.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/scheduling.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/shortcut-help.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/sidebar-permalink-panel.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/sidebar.test.js (91%)
rename packages/e2e-tests/specs/{ => editor/various}/splitting-merging.test.js (94%)
rename packages/e2e-tests/specs/{ => editor/various}/style-variation.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/taxonomies.test.js (82%)
rename packages/e2e-tests/specs/{ => editor/various}/typewriter.test.js (100%)
rename packages/e2e-tests/specs/{ => editor/various}/undo.test.js (55%)
rename packages/e2e-tests/specs/{ => editor/various}/writing-flow.test.js (100%)
rename packages/e2e-tests/specs/{ => local}/demo.test.js (100%)
delete mode 100644 packages/e2e-tests/specs/multi-block-selection.test.js
delete mode 100644 packages/e2e-tests/specs/nux.test.js
rename packages/e2e-tests/specs/{ => performance}/.gitignore (100%)
rename packages/e2e-tests/specs/{ => performance}/performance.test.js (92%)
delete mode 100644 packages/e2e-tests/specs/plugins/__snapshots__/plugins-api.test.js.snap
delete mode 100644 packages/e2e-tests/specs/post-visibility.test.js
create mode 100644 packages/edit-post/src/components/editor-regions/index.js
create mode 100644 packages/edit-post/src/components/editor-regions/style.scss
delete mode 100644 packages/edit-post/src/components/options-modal/options/deferred.js
delete mode 100644 packages/edit-post/src/components/options-modal/options/enable-tips.js
create mode 100644 packages/edit-post/src/components/sidebar/post-slug/index.js
create mode 100644 packages/edit-post/src/components/sidebar/post-slug/style.scss
delete mode 100644 packages/edit-post/src/components/sidebar/settings-sidebar/style.scss
create mode 100644 packages/edit-post/src/components/welcome-guide/images.js
create mode 100644 packages/edit-post/src/components/welcome-guide/index.js
create mode 100644 packages/edit-post/src/components/welcome-guide/style.scss
create mode 100644 packages/edit-post/src/plugins/welcome-guide-menu-item/index.js
create mode 100644 packages/editor/src/components/post-slug/check.js
create mode 100644 packages/editor/src/components/post-slug/index.js
create mode 100644 packages/editor/src/components/post-slug/test/check.js
create mode 100644 packages/editor/src/components/post-slug/test/index.js
delete mode 100644 packages/editor/src/store/effects/test/utils.js
delete mode 100644 packages/editor/src/store/effects/utils.js
create mode 100644 packages/editor/src/utils/media-upload/index.native.js
create mode 100644 packages/element/src/create-interpolate-element.js
create mode 100644 packages/element/src/platform.android.js
create mode 100644 packages/element/src/platform.ios.js
create mode 100644 packages/element/src/platform.js
create mode 100644 packages/element/src/test/create-interpolate-element.js
create mode 100644 packages/element/src/test/platform.js
create mode 100644 packages/element/src/test/platform.native.js
create mode 100644 packages/env/.npmrc
create mode 100644 packages/env/lib/detect-context.js
create mode 100644 packages/env/lib/resolve-dependencies.js
rename packages/env/{tests/cli.test.js => test/cli.js} (100%)
create mode 100644 packages/jest-preset-default/jest-preset.js
delete mode 100644 packages/jest-preset-default/jest-preset.json
create mode 100644 packages/jest-preset-default/scripts/travis-fold-passes-reporter.js
create mode 100644 packages/rich-text/src/can-indent-list-items.js
create mode 100644 packages/rich-text/src/can-outdent-list-items.js
delete mode 100644 packages/rich-text/src/component/aria.js
delete mode 100644 packages/rich-text/src/component/editable.js
delete mode 100644 packages/rich-text/src/component/test/index.js
create mode 100644 packages/rich-text/src/test/can-indent-list-items.js
create mode 100644 packages/rich-text/src/test/can-outdent-list-items.js
create mode 100644 packages/url/src/add-query-args.js
create mode 100644 packages/url/src/filter-url-for-display.js
create mode 100644 packages/url/src/get-authority.js
create mode 100644 packages/url/src/get-fragment.js
create mode 100644 packages/url/src/get-path.js
create mode 100644 packages/url/src/get-protocol.js
create mode 100644 packages/url/src/get-query-arg.js
create mode 100644 packages/url/src/get-query-string.js
create mode 100644 packages/url/src/has-query-arg.js
create mode 100644 packages/url/src/is-email.js
create mode 100644 packages/url/src/is-url.js
create mode 100644 packages/url/src/is-valid-authority.js
create mode 100644 packages/url/src/is-valid-fragment.js
create mode 100644 packages/url/src/is-valid-path.js
create mode 100644 packages/url/src/is-valid-protocol.js
create mode 100644 packages/url/src/is-valid-query-string.js
create mode 100644 packages/url/src/prepend-http.js
create mode 100644 packages/url/src/remove-query-args.js
create mode 100644 packages/url/src/safe-decode-uri-component.js
create mode 100644 packages/url/src/safe-decode-uri.js
delete mode 100644 packages/viewport/src/index.native.js
create mode 100644 packages/viewport/src/listener.js
create mode 100644 packages/viewport/src/listener.native.js
delete mode 100644 playground/.babelrc
delete mode 100644 playground/src/index.html
delete mode 100644 playground/src/index.js
delete mode 100644 playground/src/style.scss
create mode 100644 readme.txt
create mode 100644 storybook/.babelrc
create mode 100644 storybook/.sassrc
create mode 100644 storybook/README.md
rename {packages/components/storybook => storybook}/addons.js (56%)
create mode 100644 storybook/config.js
rename {packages/components/storybook => storybook}/presets.js (100%)
create mode 100644 storybook/preview-head.html
rename {packages/components => storybook/stories}/docs/introduction.story.mdx (70%)
rename {playground/src => storybook/stories/playground}/editor-styles.scss (100%)
create mode 100644 storybook/stories/playground/index.js
rename {playground/src => storybook/stories/playground}/reset.scss (100%)
create mode 100644 storybook/stories/playground/style.scss
create mode 100644 storybook/style.scss
create mode 100644 storybook/test/__snapshots__/index.js.snap
create mode 100644 storybook/test/index.js
create mode 100644 storybook/webpack.config.js
create mode 100644 test/integration/fixtures/google-docs-blank-lines.html
create mode 100644 test/integration/fixtures/inline-with-html-formatting-space.html
create mode 100644 test/integration/fixtures/list-with-attributes.html
create mode 100644 test/integration/fixtures/shortcode-matching-in.html
create mode 100644 test/integration/fixtures/shortcode-matching-out.html
create mode 100644 test/integration/fixtures/windows.html
create mode 100644 test/unit/config/global-mocks.js
create mode 100644 test/unit/config/register-context.js
diff --git a/.eslintrc.js b/.eslintrc.js
index 048741301a81fc..c6404f79817f42 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -16,6 +16,17 @@ const { version } = require( './package' );
*/
const majorMinorRegExp = escapeRegExp( version.replace( /\.\d+$/, '' ) ) + '(\\.\\d+)?';
+/**
+ * The list of patterns matching files used only for development purposes.
+ *
+ * @type {string[]}
+ */
+const developmentFiles = [
+ '**/benchmark/**/*.js',
+ '**/@(__mocks__|__tests__|test)/**/*.js',
+ '**/@(storybook|stories)/**/*.js',
+];
+
module.exports = {
root: true,
extends: [
@@ -97,33 +108,42 @@ module.exports = {
message: 'Avoid truthy checks on length property rendering, as zero length is rendered verbatim.',
},
],
- 'react/forbid-elements': [ 'error', {
- forbid: [
- [ 'circle', 'Circle' ],
- [ 'g', 'G' ],
- [ 'path', 'Path' ],
- [ 'polygon', 'Polygon' ],
- [ 'rect', 'Rect' ],
- [ 'svg', 'SVG' ],
- ].map( ( [ element, componentName ] ) => {
- return {
- element,
- message: `use cross-platform <${ componentName }> component instead.`,
- };
- } ),
- } ],
},
overrides: [
{
files: [ 'packages/**/*.js' ],
+ excludedFiles: [
+ '**/*.@(android|ios|native).js',
+ ...developmentFiles,
+ ],
rules: {
'import/no-extraneous-dependencies': 'error',
},
+ },
+ {
+ files: [ 'packages/**/*.js' ],
excludedFiles: [
- '**/*.@(android|ios|native).js',
- '**/@(benchmark|test|__tests__)/**/*.js',
- '**/{storybook,stories}\/*\.js',
+ 'packages/block-library/src/*/save.js',
+ ...developmentFiles,
],
+ rules: {
+ 'react/forbid-elements': [ 'error', {
+ forbid: [
+ [ 'button', 'Button' ],
+ [ 'circle', 'Circle' ],
+ [ 'g', 'G' ],
+ [ 'path', 'Path' ],
+ [ 'polygon', 'Polygon' ],
+ [ 'rect', 'Rect' ],
+ [ 'svg', 'SVG' ],
+ ].map( ( [ element, componentName ] ) => {
+ return {
+ element,
+ message: `use cross-platform <${ componentName } /> component instead.`,
+ };
+ } ),
+ } ],
+ },
},
{
files: [
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 33d5a864d489d8..d450512bd5dafa 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -20,7 +20,7 @@
/packages/block-editor @youknowriad @talldan @ellatrix
/packages/block-serialization-spec-parser @dmsnell
/packages/block-serialization-default-parser @dmsnell
-/packages/blocks @youknowriad @gziolo @ellatrix
+/packages/blocks @youknowriad @ellatrix
/packages/edit-post @talldan
/packages/editor @talldan
/packages/list-reusable-blocks @youknowriad @noisysocks
@@ -40,7 +40,7 @@
/packages/custom-templated-path-webpack-plugin @ntwb @nerrad @ajitbohra
/packages/docgen @nosolosw
/packages/e2e-test-utils @gziolo @ntwb @nerrad @ajitbohra
-/packages/e2e-tests @gziolo @ntwb @nerrad @ajitbohra @talldan
+/packages/e2e-tests @ntwb @nerrad @ajitbohra @talldan
/packages/eslint-plugin @gziolo @ntwb @nerrad @ajitbohra
/packages/jest-console @gziolo @ntwb @nerrad @ajitbohra
/packages/jest-preset-default @gziolo @ntwb @nerrad @ajitbohra
@@ -51,9 +51,9 @@
/packages/scripts @youknowriad @gziolo @ntwb @nerrad @ajitbohra
# UI Components
-/packages/components @youknowriad @gziolo @ajitbohra @jaymanpandya @jorgefilipecosta @talldan @chrisvanpatten
-/packages/compose @youknowriad @gziolo @ajitbohra @jaymanpandya @jorgefilipecosta @talldan
-/packages/element @youknowriad @gziolo @ajitbohra @jaymanpandya @jorgefilipecosta @talldan
+/packages/components @youknowriad @ajitbohra @jaymanpandya @jorgefilipecosta @talldan @chrisvanpatten
+/packages/compose @youknowriad @ajitbohra @jaymanpandya @jorgefilipecosta @talldan
+/packages/element @youknowriad @ajitbohra @jaymanpandya @jorgefilipecosta @talldan
/packages/notices @ajitbohra @jaymanpandya @jorgefilipecosta @talldan
/packages/nux @ajitbohra @jaymanpandya @jorgefilipecosta @talldan @noisysocks
/packages/viewport @youknowriad @ajitbohra @jaymanpandya @jorgefilipecosta @talldan
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index bef89730704cbb..0ef842b5a800dc 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -20,3 +20,4 @@
- [ ] My code follows the accessibility standards.
- [ ] My code has proper inline documentation.
- [ ] I've included developer documentation if appropriate.
+- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR. .
diff --git a/.npmpackagejsonlintrc.json b/.npmpackagejsonlintrc.json
new file mode 100644
index 00000000000000..daab51fa30d456
--- /dev/null
+++ b/.npmpackagejsonlintrc.json
@@ -0,0 +1,39 @@
+{
+ "extends": "@wordpress/npm-package-json-lint-config",
+ "rules": {
+ "description-format": [
+ "error",
+ {
+ "requireCapitalFirstLetter": true,
+ "requireEndingPeriod": true
+ }
+ ],
+ "prefer-no-devDependencies": "error",
+ "require-publishConfig": "error",
+ "require-repository-directory": "error",
+ "valid-values-author": [
+ "error",
+ [
+ "The WordPress Contributors"
+ ]
+ ],
+ "valid-values-publishConfig": [
+ "error",
+ [
+ {
+ "access": "public"
+ }
+ ]
+ ]
+ },
+ "overrides": [
+ {
+ "patterns": [ "./package.json" ],
+ "rules": {
+ "require-publishConfig": "off",
+ "require-repository-directory": "off",
+ "prefer-no-devDependencies": "off"
+ }
+ }
+ ]
+}
diff --git a/.travis.yml b/.travis.yml
index d8ef733a6326df..9877a142aef875 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -21,7 +21,8 @@ branches:
only:
- master
- rnmobile/master
- - wp/trunk
+ - rnmobile/releases
+ - /wp\/.*/
env:
global:
@@ -49,10 +50,10 @@ install:
- |
if [[ "$INSTALL_WORDPRESS" = "true" ]]; then
# Download and unpack WordPress.
- curl -sL https://wordpress.org/nightly-builds/wordpress-latest.zip -o /tmp/wordpress-latest.zip
+ curl -sL https://github.com/WordPress/WordPress/archive/master.zip -o /tmp/wordpress-latest.zip
unzip -q /tmp/wordpress-latest.zip -d /tmp
mkdir -p wordpress/src
- mv /tmp/wordpress/* wordpress/src
+ mv /tmp/WordPress-master/* wordpress/src
# Create the upload directory with permissions that Travis can handle.
mkdir -p wordpress/src/wp-content/uploads
@@ -70,7 +71,7 @@ install:
/tmp/wordpress-develop-master/*config-sample.php \
/tmp/wordpress-develop-master/package.json wordpress
- # Install WordPress.
+ # Install WordPress. The additional dependencies are required by the copied `wordpress-develop` tools.
cd wordpress
npm install dotenv wait-on
npm run env:start
@@ -100,6 +101,13 @@ jobs:
script:
- npm run lint
+ - name: Lint ES5 only
+ install:
+ - npm ci
+ - npm run build
+ script:
+ - npx eslint --parser-options=ecmaVersion:5 --no-eslintrc --no-ignore ./build/**/*.js
+
- name: Build artifacts
install:
# A "full" install is executed, since `npm ci` does not always exit
@@ -196,13 +204,13 @@ jobs:
- $( npm bin )/wp-scripts test-e2e --config=./packages/e2e-tests/jest.config.js --cacheDirectory="$HOME/.jest-cache" --runTestsByPath $( awk 'NR % 4 == 3' < ~/.jest-e2e-tests )
- stage: deploy
- if: branch = master
+ if: (NOT type IN (pull_request)) AND (branch = master)
name: Deploy Playground
env: INSTALL_WORDPRESS=false
+ install:
+ - npm ci
before_deploy:
- - npm install
- - npm run playground:build -- --public-url '/gutenberg'
- - npm run design-system:build
+ - npm run storybook:build
deploy:
provider: pages
skip_cleanup: true
@@ -213,4 +221,4 @@ jobs:
branch: master
allow_failures:
- - name: JavaScript native mobile tests
+ # nothing is allowed to fail at the moment
diff --git a/README.md b/README.md
index e6b4565775def9..c11f2a71a5650a 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
[![Build Status](https://img.shields.io/travis/com/WordPress/gutenberg/master.svg)](https://travis-ci.com/WordPress/gutenberg)
[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org)
-![Screenshot of the Gutenberg Editor, editing a post in WordPress](https://cldup.com/H0oKBfpidk.png)
+![Screenshot of the Gutenberg Editor, editing a post in WordPress](https://cldup.com/R84R5fNgrI.png)
This repo is the development hub for the editor focus in WordPress Core. `Gutenberg` is the project name.
@@ -32,7 +32,6 @@ Here's why we're looking at the whole editing screen, as opposed to just the con
4. **A fresh look at content creation.** Considering the whole interface lays a solid foundation for the next focus: full site customization.
5. **Modern tooling.** Looking at the full editor screen also gives WordPress the opportunity to drastically modernize the foundation, and take steps towards a more fluid and JavaScript-powered future that fully leverages the WordPress REST API.
-![Writing in Gutenberg 1.6](https://make.wordpress.org/core/files/2017/10/gutenberg-typing-1_6.gif)
## Blocks
diff --git a/babel.config.js b/babel.config.js
index 7679cc1e837041..83d78a0eeadb6d 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -3,6 +3,9 @@ module.exports = function( api ) {
return {
presets: [ '@wordpress/babel-preset-default' ],
- plugins: [ 'babel-plugin-inline-json-import' ],
+ plugins: [
+ 'babel-plugin-emotion',
+ 'babel-plugin-inline-json-import',
+ ],
};
};
diff --git a/bin/build-plugin-zip.sh b/bin/build-plugin-zip.sh
index 4db22d18b5acdf..0d5746fbda279c 100755
--- a/bin/build-plugin-zip.sh
+++ b/bin/build-plugin-zip.sh
@@ -120,6 +120,8 @@ zip -r gutenberg.zip \
post-content.php \
$vendor_scripts \
$build_files \
+ readme.txt \
+ changelog.txt \
README.md
# Reset `gutenberg.php`.
diff --git a/bin/commander.js b/bin/commander.js
index dcc863872f034d..585e8522f5e165 100755
--- a/bin/commander.js
+++ b/bin/commander.js
@@ -8,7 +8,8 @@ const program = require( 'commander' );
const inquirer = require( 'inquirer' );
const semver = require( 'semver' );
const chalk = require( 'chalk' );
-const fs = require( 'fs-extra' );
+const fs = require( 'fs' );
+const rimraf = require( 'rimraf' );
const SimpleGit = require( 'simple-git/promise' );
const childProcess = require( 'child_process' );
const Octokit = require( '@octokit/rest' );
@@ -17,7 +18,7 @@ const uuid = require( 'uuid/v4' );
// Config
const gitRepoOwner = 'WordPress';
-const gitRepoURL = 'git@github.com:' + gitRepoOwner + '/gutenberg.git';
+const gitRepoURL = 'https://github.com/' + gitRepoOwner + '/gutenberg.git';
const svnRepoURL = 'https://plugins.svn.wordpress.org/gutenberg';
// Working Directories
@@ -30,6 +31,8 @@ const warning = chalk.bold.keyword( 'orange' );
const success = chalk.bold.green;
// Utils
+const STABLE_TAG_REGEX = /Stable tag: [0-9]+\.[0-9]+\.[0-9]+\s*\n/;
+const STABLE_TAG_PLACEHOLDER = 'Stable tag: V.V.V\n';
/**
* Small utility used to read an uncached version of a JSON file
@@ -95,6 +98,7 @@ function runShellScript( script, cwd ) {
env: {
NO_CHECKS: true,
PATH: process.env.PATH,
+ HOME: process.env.HOME,
},
stdio: [ 'inherit', 'ignore', 'inherit' ],
} );
@@ -143,33 +147,24 @@ async function runUpdateTrunkContentStep( version, changelog, abortMessage ) {
await runStep( 'Updating trunk content', abortMessage, async () => {
console.log( '>> Replacing trunk content using the new plugin ZIP' );
- // Delete everything except readme.txt and changelog.txt
- runShellScript( 'find . -maxdepth 1 -not -name "changelog.txt" -not -name "readme.txt" -not -name ".svn" -not -name "." -not -name ".." -exec rm -rf {} +', svnWorkingDirectoryPath );
+ const readmePath = svnWorkingDirectoryPath + '/readme.txt';
+
+ const previousReadmeFileContent = fs.readFileSync( readmePath, 'utf8' );
+ const stableTag = previousReadmeFileContent.match( STABLE_TAG_REGEX )[ 0 ];
+
+ // Delete everything
+ runShellScript( 'find . -maxdepth 1 -not -name ".svn" -not -name "." -not -name ".." -exec rm -rf {} +', svnWorkingDirectoryPath );
// Update the content using the plugin ZIP
const gutenbergZipPath = gitWorkingDirectoryPath + '/gutenberg.zip';
runShellScript( 'unzip ' + gutenbergZipPath + ' -d ' + svnWorkingDirectoryPath );
- console.log( '>> Updating the changelog in readme.txt and changelog.txt' );
-
- // Update the content of the readme.txt file
- const readmePath = svnWorkingDirectoryPath + '/readme.txt';
- const readmeFileContent = fs.readFileSync( readmePath, 'utf8' );
- const newReadmeContent =
- readmeFileContent.substr( 0, readmeFileContent.indexOf( '== Changelog ==' ) ) +
- '== Changelog ==\n\n' +
- changelog + '\n';
- fs.writeFileSync( readmePath, newReadmeContent );
-
- // Update the content of the changelog.txt file
- const changelogPath = svnWorkingDirectoryPath + '/changelog.txt';
- const changelogFileContent = fs.readFileSync( changelogPath, 'utf8' );
- const newChangelogContent =
- '== Changelog ==\n\n' +
- '= ' + version + ' =\n\n' +
- changelog +
- changelogFileContent.substr( changelogFileContent.indexOf( '== Changelog ==' ) + 16 );
- fs.writeFileSync( changelogPath, newChangelogContent );
+ // Replace the stable tag placeholder with the existing stable tag on the SVN repository.
+ const newReadmeFileContent = fs.readFileSync( readmePath, 'utf8' );
+ fs.writeFileSync(
+ readmePath,
+ newReadmeFileContent.replace( STABLE_TAG_PLACEHOLDER, stableTag )
+ );
// Commit the content changes
runShellScript( "svn st | grep '^\?' | awk '{print $2}' | xargs svn add", svnWorkingDirectoryPath );
@@ -217,7 +212,7 @@ async function updateThePluginStableVersion( version, abortMessage ) {
const readmePath = svnWorkingDirectoryPath + '/readme.txt';
const readmeFileContent = fs.readFileSync( readmePath, 'utf8' );
const newReadmeContent = readmeFileContent.replace(
- /Stable tag: [0-9]+.[0-9]+.[0-9]+\s*\n/,
+ STABLE_TAG_REGEX,
'Stable tag: ' + version + '\n'
);
fs.writeFileSync( readmePath, newReadmeContent );
@@ -242,8 +237,8 @@ async function updateThePluginStableVersion( version, abortMessage ) {
*/
async function runCleanLocalCloneStep( abortMessage ) {
await runStep( 'Cleaning the temporary folder', abortMessage, async () => {
- await fs.remove( gitWorkingDirectoryPath );
- await fs.remove( svnWorkingDirectoryPath );
+ await rimraf( gitWorkingDirectoryPath );
+ await rimraf( svnWorkingDirectoryPath );
} );
}
@@ -340,11 +335,12 @@ async function runReleaseBranchCheckoutStep( abortMessage ) {
* and commit the changes.
*
* @param {string} version Version to use.
+ * @param {string} changelog Changelog to use.
* @param {string} abortMessage Abort message.
*
* @return {string} hash of the version bump commit.
*/
-async function runBumpPluginVersionAndCommitStep( version, abortMessage ) {
+async function runBumpPluginVersionAndCommitStep( version, changelog, abortMessage ) {
let commitHash;
await runStep( 'Updating the plugin version', abortMessage, async () => {
const simpleGit = SimpleGit( gitWorkingDirectoryPath );
@@ -367,6 +363,32 @@ async function runBumpPluginVersionAndCommitStep( version, abortMessage ) {
fs.writeFileSync( pluginFilePath, content.replace( ' * Version: ' + packageJson.version, ' * Version: ' + version ) );
console.log( '>> The plugin version has been updated successfully.' );
+ // Update the content of the readme.txt file
+ const readmePath = gitWorkingDirectoryPath + '/readme.txt';
+ const readmeFileContent = fs.readFileSync( readmePath, 'utf8' );
+ const newReadmeContent =
+ readmeFileContent.substr( 0, readmeFileContent.indexOf( '== Changelog ==' ) ) +
+ '== Changelog ==\n\n' +
+ changelog + '\n';
+ fs.writeFileSync( readmePath, newReadmeContent );
+
+ // Update the content of the changelog.txt file
+ const stableVersion = version.match( /[0-9]+\.[0-9]+\.[0-9]+/ )[ 0 ];
+ const changelogPath = gitWorkingDirectoryPath + '/changelog.txt';
+ const changelogFileContent = fs.readFileSync( changelogPath, 'utf8' );
+ const versionHeader = '= ' + version + ' =\n\n';
+ const regexToSearch = /=\s([0-9]+\.[0-9]+\.[0-9]+)(-rc\.[0-9]+)?\s=\n\n/g;
+ let lastDifferentVersionMatch = regexToSearch.exec( changelogFileContent );
+ if ( lastDifferentVersionMatch[ 1 ] === stableVersion ) {
+ lastDifferentVersionMatch = regexToSearch.exec( changelogFileContent );
+ }
+ const newChangelogContent =
+ '== Changelog ==\n\n' +
+ versionHeader +
+ changelog + '\n\n' +
+ changelogFileContent.substr( lastDifferentVersionMatch.index );
+ fs.writeFileSync( changelogPath, newChangelogContent );
+
// Commit the version bump
await askForConfirmationToContinue(
'Please check the diff. Proceed with the version bump commit?',
@@ -377,6 +399,8 @@ async function runBumpPluginVersionAndCommitStep( version, abortMessage ) {
packageJsonPath,
packageLockPath,
pluginFilePath,
+ readmePath,
+ changelogPath,
] );
const commitData = await simpleGit.commit( 'Bump plugin version to ' + version );
commitHash = commitData.commit;
@@ -448,12 +472,13 @@ async function runPushGitChangesStep( releaseBranch, abortMessage ) {
*
* @param {string} version Released version.
* @param {string} versionLabel Label of the released Version.
+ * @param {string} changelog Release changelog.
* @param {boolean} isPrerelease is a pre-release.
* @param {string} abortMessage Abort message.
*
* @return {Object} Github release object.
*/
-async function runGithubReleaseStep( version, versionLabel, isPrerelease, abortMessage ) {
+async function runGithubReleaseStep( version, versionLabel, changelog, isPrerelease, abortMessage ) {
let octokit;
let release;
await runStep( 'Creating the GitHub release', abortMessage, async () => {
@@ -462,11 +487,6 @@ async function runGithubReleaseStep( version, versionLabel, isPrerelease, abortM
true,
abortMessage
);
- const { changelog } = await inquirer.prompt( [ {
- type: 'editor',
- name: 'changelog',
- message: 'Please provide the CHANGELOG of the release (markdown)',
- } ] );
const { token } = await inquirer.prompt( [ {
type: 'input',
@@ -548,6 +568,12 @@ async function releasePlugin( isRC = true ) {
let abortMessage = 'Aborting!';
await askForConfirmationToContinue( 'Ready to go? ' );
+ const { changelog } = await inquirer.prompt( [ {
+ type: 'editor',
+ name: 'changelog',
+ message: 'Please provide the CHANGELOG of the release (markdown)',
+ } ] );
+
// Cloning the Git repository
await runGitRepositoryCloneStep( abortMessage );
@@ -557,7 +583,7 @@ async function releasePlugin( isRC = true ) {
await runReleaseBranchCheckoutStep( abortMessage );
// Bumping the version and commit.
- const commitHash = await runBumpPluginVersionAndCommitStep( version, abortMessage );
+ const commitHash = await runBumpPluginVersionAndCommitStep( version, changelog, abortMessage );
// Plugin ZIP creation
await runPluginZIPCreationStep();
@@ -570,7 +596,7 @@ async function releasePlugin( isRC = true ) {
abortMessage = 'Aborting! Make sure to ' + isRC ? 'remove' : 'reset' + ' the remote release branch and remove the git tag.';
// Creating the GitHub Release
- const release = await runGithubReleaseStep( version, versionLabel, isRC, abortMessage );
+ const release = await runGithubReleaseStep( version, versionLabel, changelog, isRC, abortMessage );
abortMessage = 'Aborting! Make sure to manually cherry-pick the ' + success( commitHash ) + ' commit to the master branch.';
if ( ! isRC ) {
abortMessage += ' Make sure to perform the SVN release manually as well.';
diff --git a/bin/get-vendor-scripts.php b/bin/get-vendor-scripts.php
index 442e77b0eb4358..e7295f556b4cb2 100755
--- a/bin/get-vendor-scripts.php
+++ b/bin/get-vendor-scripts.php
@@ -32,4 +32,13 @@ function wp_add_inline_script() {}
require_once dirname( dirname( __FILE__ ) ) . '/lib/client-assets.php';
-gutenberg_register_vendor_scripts();
+/**
+ * Hi, phpcs
+ */
+function run_gutenberg_register_vendor_scripts() {
+ global $wp_scripts;
+
+ gutenberg_register_vendor_scripts( $wp_scripts );
+}
+
+run_gutenberg_register_vendor_scripts();
diff --git a/bin/packages/build-worker.js b/bin/packages/build-worker.js
index 7e3e636c013a1d..d0f1d1c809984a 100644
--- a/bin/packages/build-worker.js
+++ b/bin/packages/build-worker.js
@@ -94,7 +94,7 @@ const BUILD_TASK_BY_EXTENSION = {
const builtSass = await renderSass( {
file,
- includePaths: [ path.resolve( __dirname, '../../assets/stylesheets' ) ],
+ includePaths: [ path.join( PACKAGES_DIR, 'base-styles' ) ],
data: (
[
'colors',
diff --git a/bin/packages/build.js b/bin/packages/build.js
index 5447ba82d2c80f..17006dbdc8638a 100755
--- a/bin/packages/build.js
+++ b/bin/packages/build.js
@@ -126,8 +126,9 @@ if ( files.length ) {
`${ PACKAGES_DIR }/*/src/*.scss`,
], {
ignore: [
- `**/test/**`,
- `**/__mocks__/**`,
+ `**/benchmark/**`,
+ `**/{__mocks__,__tests__,test}/**`,
+ `**/{storybook,stories}/**`,
],
onlyFiles: true,
} );
diff --git a/bin/packages/post-css-config.js b/bin/packages/post-css-config.js
index b6a5dc8e58d30d..842688a8d784b7 100644
--- a/bin/packages/post-css-config.js
+++ b/bin/packages/post-css-config.js
@@ -1,64 +1,7 @@
+const { adminColorSchemes } = require( '@wordpress/base-styles' );
+
module.exports = [
- require( '@wordpress/postcss-themes' )( {
- defaults: {
- primary: '#0085ba',
- secondary: '#11a0d2',
- toggle: '#11a0d2',
- button: '#007cba',
- outlines: '#007cba',
- },
- themes: {
- 'admin-color-light': {
- primary: '#0085ba',
- secondary: '#c75726',
- toggle: '#11a0d2',
- button: '#0085ba',
- outlines: '#007cba',
- },
- 'admin-color-blue': {
- primary: '#82b4cb',
- secondary: '#d9ab59',
- toggle: '#82b4cb',
- button: '#d9ab59',
- outlines: '#417e9B',
- },
- 'admin-color-coffee': {
- primary: '#c2a68c',
- secondary: '#9fa47b',
- toggle: '#c2a68c',
- button: '#c2a68c',
- outlines: '#59524c',
- },
- 'admin-color-ectoplasm': {
- primary: '#a7b656',
- secondary: '#c77430',
- toggle: '#a7b656',
- button: '#a7b656',
- outlines: '#523f6d',
- },
- 'admin-color-midnight': {
- primary: '#e14d43',
- secondary: '#77a6b9',
- toggle: '#77a6b9',
- button: '#e14d43',
- outlines: '#497b8d',
- },
- 'admin-color-ocean': {
- primary: '#a3b9a2',
- secondary: '#a89d8a',
- toggle: '#a3b9a2',
- button: '#a3b9a2',
- outlines: '#5e7d5e',
- },
- 'admin-color-sunrise': {
- primary: '#d1864a',
- secondary: '#c8b03c',
- toggle: '#c8b03c',
- button: '#d1864a',
- outlines: '#837425',
- },
- },
- } ),
- require( 'autoprefixer' ),
+ require( '@wordpress/postcss-themes' )( adminColorSchemes ),
+ require( 'autoprefixer' )( { grid: true } ),
require( 'postcss-color-function' ),
];
diff --git a/bin/packages/watch.js b/bin/packages/watch.js
index 1add26a5677a7f..b307029dcd568f 100644
--- a/bin/packages/watch.js
+++ b/bin/packages/watch.js
@@ -27,7 +27,7 @@ const exists = ( filename ) => {
// and files with a suffix of .test or .spec (e.g. blocks.test.js),
// and deceitful source-like files, such as editor swap files.
const isSourceFile = ( filename ) => {
- return ! [ /\/(__tests__|test)\/.+.js$/, /.\.(spec|test)\.js$/ ].some( ( regex ) => regex.test( filename ) ) && /.\.(js|json|scss)$/.test( filename );
+ return ! [ /\/(benchmark|__mocks__|__tests__|test|storybook|stories)\/.+.js$/, /.\.(spec|test)\.js$/ ].some( ( regex ) => regex.test( filename ) ) && /.\.(js|json|scss)$/.test( filename );
};
const rebuild = ( filename ) => filesToBuild.set( filename, true );
diff --git a/bin/update-readmes.js b/bin/update-readmes.js
index df420007de3970..4fb85e423b5562 100755
--- a/bin/update-readmes.js
+++ b/bin/update-readmes.js
@@ -51,7 +51,7 @@ packages.forEach( ( entry ) => {
// Each target operates over the same file, so it needs to be processed synchronously,
// as to make sure the processes don't overwrite each other.
const { status, stderr } = spawnSync(
- join( __dirname, '..', 'node_modules', '.bin', 'docgen' ),
+ join( __dirname, '..', 'node_modules', '.bin', 'docgen' ).replace( / /g, '\\ ' ),
[
join( 'packages', packageName, path ),
`--output packages/${ packageName }/README.md`,
diff --git a/changelog.txt b/changelog.txt
new file mode 100644
index 00000000000000..87da9dabf10c9e
--- /dev/null
+++ b/changelog.txt
@@ -0,0 +1,5932 @@
+== Changelog ==
+
+= 7.1.0 =
+
+### Features
+
+* Adding a menu to visually [switch between edit and](https://github.com/WordPress/gutenberg/pull/18624) [navigation](https://github.com/WordPress/gutenberg/pull/18829) [modes](https://github.com/WordPress/gutenberg/pull/18805) and announce the mode changes to screen reader users.
+* Support adding [a caption to the Table block](https://github.com/WordPress/gutenberg/pull/15554).
+* Implement a [Welcome Guide](https://github.com/WordPress/gutenberg/pull/18041) modal.
+
+### Enhancements
+
+* Use a [Fixed Block](https://github.com/WordPress/gutenberg/pull/18686) [Toolbar](https://github.com/WordPress/gutenberg/pull/18945https://github.com/WordPress/gutenberg/pull/18945) [on](https://github.com/WordPress/gutenberg/pull/19014) Mobile Web.
+* Block UI:
+ * [Remove the parent block from the block title](https://github.com/WordPress/gutenberg/pull/18795) component.
+ * [Remove dashed](https://github.com/WordPress/gutenberg/pull/18105) [outlines](https://github.com/WordPress/gutenberg/pull/18865) for child and parent blocks.
+ * Remove [hover](https://github.com/WordPress/gutenberg/pull/18862) [styles](https://github.com/WordPress/gutenberg/pull/18904).
+* Navigation block:
+ * Keep a single place to trigger the “[Open in a new tab](https://github.com/WordPress/gutenberg/pull/18532)” option.
+ * Fix overflow by allowing [wrapping of menu items](https://github.com/WordPress/gutenberg/pull/18431).
+ * Fix [double click to open the appender](https://github.com/WordPress/gutenberg/pull/18379).
+ * Add a **type=submit** to the [search suggestion buttons](https://github.com/WordPress/gutenberg/pull/18933).
+ * Support [justifying the menu items](https://github.com/WordPress/gutenberg/pull/18909).
+ * Use [correct classnames](https://github.com/WordPress/gutenberg/pull/18926) for navigation link block save output.
+ * Remove the [inspector controls](https://github.com/WordPress/gutenberg/pull/18948).
+* Improve the block multi-selection:
+ * A11y: [Use the browser’s selection](https://github.com/WordPress/gutenberg/pull/16835) default color.
+ * Polish the [styles](https://github.com/WordPress/gutenberg/pull/18867).
+ * [Responsive](https://github.com/WordPress/gutenberg/pull/18915) multi-selection.
+ * [Allow pasting](https://github.com/WordPress/gutenberg/pull/18746) on multi-selection.
+* Improve the [Image blocks replacement flow/UI](https://github.com/WordPress/gutenberg/pull/16200).
+* Disable the [HTML mode in the Cover block](https://github.com/WordPress/gutenberg/pull/18730).
+* Add [friendly offline error messages](https://github.com/WordPress/gutenberg/pull/17961) on Rest API request failures.
+* [Round the focal point](https://github.com/WordPress/gutenberg/pull/18765) coordinates.
+* Popover & Dropdowns: Consistently and [smoothly](https://github.com/WordPress/gutenberg/pull/18813) [adjust](https://github.com/WordPress/gutenberg/pull/18936) the [position on scroll](https://github.com/WordPress/gutenberg/pull/17867).
+* Remove [clearing the block selection](https://github.com/WordPress/gutenberg/pull/18621) on sidebar tab switch.
+* [Separate editor notices](https://github.com/WordPress/gutenberg/pull/18871) by border instead of margin.
+* Allow [drag and dropping images into the featured image](https://github.com/WordPress/gutenberg/pull/17486https://github.com/WordPress/gutenberg/pull/17486) box.
+
+### Bug Fixes
+
+* Prevent [resized Image blocks](https://github.com/WordPress/gutenberg/pull/18728) from overlapping the boundaries of the block.
+* Fix [wrong link to attachment page](https://github.com/WordPress/gutenberg/pull/18731) after replacing images.
+* Fix Media & Text block: "[Crop image to fill entire column](https://github.com/WordPress/gutenberg/pull/18729)" reset on image change.
+* Fix the [Snackbar notices position](https://github.com/WordPress/gutenberg/pull/18801).
+* Save the [Verse block line breaks](https://github.com/WordPress/gutenberg/pull/18372) as single characters.
+* [Remove has-background-dim-NaN classname](https://github.com/WordPress/gutenberg/pull/18011) from the Cover block.
+* Normalize the keys of the [apiFetch preloaded data](https://github.com/WordPress/gutenberg/pull/18724) to avoid unnecessary Rest API calls.
+* Fix [CSS styles of the ColorPicker](https://github.com/WordPress/gutenberg/pull/18448) component.
+* Update the Inspector slots to use the bubblesVirtually slots Fixing [RichText usage in Inspector controls](https://github.com/WordPress/gutenberg/pull/16807).
+* Move the [Modals and Popovers](https://github.com/WordPress/gutenberg/pull/18775) to the right position in the DOM.
+* Fix [alignment of date picker days](https://github.com/WordPress/gutenberg/pull/18856) when used in block.
+* Fix alignment of [ToggleControl label](https://github.com/WordPress/gutenberg/pull/18815).
+* Fix [the toggled state](https://github.com/WordPress/gutenberg/pull/18868) in the block toolbar buttons.
+* Fix the [multi-select inspector padding](https://github.com/WordPress/gutenberg/pull/18847).
+* Fix the behavior that allows writing by [clicking anywhere in the canvas](https://github.com/WordPress/gutenberg/pull/18732).
+* Prevent [private posts with a future date](https://github.com/WordPress/gutenberg/pull/18834) from becoming public on update.
+* Fix [useColors crashes if contrast checkers](https://github.com/WordPress/gutenberg/pull/18884) are not specified.
+* Render [metaboxes as a single seemless unit](https://github.com/WordPress/gutenberg/pull/18873) to fix styling issues for themes with colored backgrounds.
+* Fix the [FontSizePicker custom option](https://github.com/WordPress/gutenberg/pull/18842).
+* Fix [reusable blocks](https://github.com/WordPress/gutenberg/pull/18902) showing up as too tall.
+* Fix [Drop Cap + alignment](https://github.com/WordPress/gutenberg/pull/18831) producing a gap between paragraphs.
+* Fix [Cover to Image block transform](https://github.com/WordPress/gutenberg/pull/18023) when no image is used in the Cover block.
+* Ensure [empty classname is not output](https://github.com/WordPress/gutenberg/pull/18861) onto table element.
+* Fix [scrolling the sidebar on mobile](https://github.com/WordPress/gutenberg/pull/18937).
+* I18: Fix the [Code block](https://github.com/WordPress/gutenberg/pull/18964) [example](https://github.com/WordPress/gutenberg/pull/18993) [string](https://github.com/WordPress/gutenberg/pull/18973).
+
+### APIs
+
+* Support a [**disabled** prop in the RichText](https://github.com/WordPress/gutenberg/pull/18792) component.
+* Add a [new](https://github.com/WordPress/gutenberg/pull/18827) [CustomSelectControl](https://github.com/WordPress/gutenberg/pull/17926) [component](https://github.com/WordPress/gutenberg/pull/18944).
+* Add a new [TextHighlight](https://github.com/WordPress/gutenberg/pull/18609) component.
+* Add a new [CustomGradientPicker](https://github.com/WordPress/gutenberg/pull/17603) component.
+* Add [useViewportMatch](https://github.com/WordPress/gutenberg/pull/18816) [React hook](https://github.com/WordPress/gutenberg/pull/18950) to the @wordpress/compose package.
+* Allowing [changing the aXe config](https://github.com/WordPress/gutenberg/pull/18712) in the @wordpress/just-puppeteer-axe package.
+
+### Experiments
+
+* Block Content Areas:
+ * Add a [demo templates](https://github.com/WordPress/gutenberg/pull/18554) directory.
+ * Add the [Template Part](https://github.com/WordPress/gutenberg/pull/18736) block.
+ * Add [documentation](https://github.com/WordPress/gutenberg/pull/18890) for the current state of the experiment.
+* Widgets screen:
+ * Clear the block selection when [clicking outside the widget areas](https://github.com/WordPress/gutenberg/pull/17851).
+* APIs:
+ * Add a new [\_\_experimentalResolveSelect](https://github.com/WordPress/gutenberg/pull/17558https://github.com/WordPress/gutenberg/pull/17558) API to the data package.
+ * Add [color detection and contrast checks support](https://github.com/WordPress/gutenberg/pull/18547) to the useColors hook.
+
+### Documentation
+
+* Improvements to the [Getting Started](https://github.com/WordPress/gutenberg/pull/18769) documentation.
+* Include [TypeScript type checking](https://github.com/WordPress/gutenberg/pull/18879) in Testing Overview.
+* Add [JSDoc recommendations](https://github.com/WordPress/gutenberg/pull/18920).
+* Reintroduce [NodeJS LTS](https://github.com/WordPress/gutenberg/pull/18923) support commitment.
+* Typos and tweaks: [1](https://github.com/WordPress/gutenberg/pull/18752), [2](https://github.com/WordPress/gutenberg/pull/18882), [3](https://github.com/WordPress/gutenberg/pull/18882), [4](https://github.com/WordPress/gutenberg/pull/18916), [5](https://github.com/WordPress/gutenberg/pull/18961), [6](https://github.com/WordPress/gutenberg/pull/19012).
+
+### Performance
+
+* Avoid [rerendering the EditorRegions component](https://github.com/WordPress/gutenberg/pull/18776) on each click.
+* Flatten and simplify the [align hook](https://github.com/WordPress/gutenberg/pull/18963) [rendering](https://github.com/WordPress/gutenberg/pull/19008).
+* Shim the [meta attribute source](https://github.com/WordPress/gutenberg/pull/18960) on block registration.
+
+### Various
+
+* Storybook: Add [StoryShots integration](https://github.com/WordPress/gutenberg/pull/18031) to generate unit tests.
+* Work on the stability of e2e tests: [1](https://github.com/WordPress/gutenberg/pull/18662), [2](https://github.com/WordPress/gutenberg/pull/18754), [3](https://github.com/WordPress/gutenberg/pull/18753), [4](https://github.com/WordPress/gutenberg/pull/18773), [5](https://github.com/WordPress/gutenberg/pull/18771).
+* Use [consistent theme colors and font sizes](https://github.com/WordPress/gutenberg/pull/18761) in e2e tests.
+* Travis: [Skip the deploy stage](https://github.com/WordPress/gutenberg/pull/18788) on PRs.
+* And a Travis job to check the [IE11 compatibility of the produced JavaScript builds](https://github.com/WordPress/gutenberg/pull/18774).
+* Avoid usage of [editor store on block editor](https://github.com/WordPress/gutenberg/pull/18784) reusable blocks inserter.
+* Replace the [fs-extra dependency with rimraf](https://github.com/WordPress/gutenberg/pull/18790).
+* RSS block: Remove [PHP 5.2 compatibility code](https://github.com/WordPress/gutenberg/pull/15806).
+* Update the [Columns block to use the Patterns API](https://github.com/WordPress/gutenberg/pull/18283).
+* Refactor the [BlockToolbar component](https://github.com/WordPress/gutenberg/pull/18843) to use React hooks.
+* Refactor the [BlockDraggable](https://github.com/WordPress/gutenberg/pull/18756) component for a simpler React tree.
+* Refactor the [BlockHTML](https://github.com/WordPress/gutenberg/pull/18968) component to use React hooks.
+* Refactor the [BlockList](https://github.com/WordPress/gutenberg/pull/18821) component to use React hooks.
+* Refactor the [BlockInsertionPoint](https://github.com/WordPress/gutenberg/pull/18821) component to use React hooks.
+* [Split @wordpress/urls into multiple modules](https://github.com/WordPress/gutenberg/pull/18689https://github.com/WordPress/gutenberg/pull/18689)/files to allow better tree-shaking.
+* Improve the Storybook setup to allow [updates on style changes](https://github.com/WordPress/gutenberg/pull/18676).
+* Enforce consistent usage of [Button and ToolbarGroup](https://github.com/WordPress/gutenberg/pull/18817) components.
+* Use the [colors hook in the Paragraph block](https://github.com/WordPress/gutenberg/pull/18148).
+* Add missing actions and tests for [lockPostAutosaving, unlockPostAutosaving](https://github.com/WordPress/gutenberg/pull/18854).
+* [Collapse passed](https://github.com/WordPress/gutenberg/pull/16755) [tests](https://github.com/WordPress/gutenberg/pull/18896) in Travis jobs.
+* Add [side effects property to the @wordpress/components package](https://github.com/WordPress/gutenberg/pull/18911) to allow tree-shaking.
+* Add a [script to perform patch releases](https://github.com/WordPress/gutenberg/pull/18938) for old npm package versions.
+* Reuse the [URLInput component in the Social Links](https://github.com/WordPress/gutenberg/pull/18905) block and [disable suggestions](https://github.com/WordPress/gutenberg/pull/18946).
+* Improve and simplify [reusable block](https://github.com/WordPress/gutenberg/pull/18903) [styles](https://github.com/WordPress/gutenberg/pull/18958).
+* Refactor the [Gallery edit component](https://github.com/WordPress/gutenberg/pull/18265) to be semi-cross-platform.
+* Run tests using the same [environment](https://github.com/WordPress/gutenberg/pull/18703) version used for development.
+* Add [CPU/Network slowdown configuration](https://github.com/WordPress/gutenberg/pull/18770) options to the e2e tests setup.
+* Enable [Type checking for the @wordpress/token-list](https://github.com/WordPress/gutenberg/pull/18839) package.
+* Move the [changelog.txt and readme.txt files](https://github.com/WordPress/gutenberg/pull/18828) to the Github repository.
+
+= 7.0.0 =
+
+### Features
+
+* Add a new Navigation block (previously available as an experiment)
+ * [Highlight menu items](https://github.com/WordPress/gutenberg/pull/18435) without defined URL.
+ * Prevent [error in Firefox](https://github.com/WordPress/gutenberg/pull/18455) when removing the block.
+ * [Remove background color](https://github.com/WordPress/gutenberg/pull/18407) from the Navigation block and rely on the Group block.
+ * Remove the [background shadow](https://github.com/WordPress/gutenberg/pull/18485) for the submenus dropdown.
+ * [Rename "Navigation Menu Item"](https://github.com/WordPress/gutenberg/pull/18422https://github.com/WordPress/gutenberg/pull/18422) block to "Link".
+ * Remove [unnecessary color attributes](https://github.com/WordPress/gutenberg/pull/18540).
+ * Allow [addition CSS](https://github.com/WordPress/gutenberg/pull/18466) [classes](https://github.com/WordPress/gutenberg/pull/18629).
+ * Drop the [“menu” suffix from the block name](https://github.com/WordPress/gutenberg/pull/18551).
+ * [Escape special](https://github.com/WordPress/gutenberg/pull/18607) [characters](https://github.com/WordPress/gutenberg/pull/18617) in the frontend.
+ * Remove from [experimental features](https://github.com/WordPress/gutenberg/pull/18594).
+ * Add [style variations](https://github.com/WordPress/gutenberg/pull/18553).
+
+### Enhancements
+
+* Use [gradient classnames](https://github.com/WordPress/gutenberg/pull/18590) instead of inline styles for the Cover block.
+* Inserter: Add [keyboard shortcut styling](https://github.com/WordPress/gutenberg/pull/18623) to "/" in the default tip.
+* [Restore the caret position](https://github.com/WordPress/gutenberg/pull/17824) properly on undo.
+* Add keywords to improve the [discoverability of the Audio block](https://github.com/WordPress/gutenberg/pull/18673).
+* Show [video preview on Cover block](https://github.com/WordPress/gutenberg/pull/18009) inspector panel.
+
+### Bug Fixes
+
+* Fix [hidden nested images](https://github.com/WordPress/gutenberg/pull/18347) in the content column.
+* Fix [double border issue](https://github.com/WordPress/gutenberg/pull/18358) in the keyboard shortcuts modal.
+* Fix [off-centered publish button](https://github.com/WordPress/gutenberg/pull/17726).
+* Fix [error when isRTL config is not provided](https://github.com/WordPress/gutenberg/pull/18526) in the block editor settings.
+* Fix [full width Table block](https://github.com/WordPress/gutenberg/pull/18469) mobile regression.
+* A11y: Add a screen reader text [label for the Search block](https://github.com/WordPress/gutenberg/pull/17983).
+* Fix [text patterns undo](https://github.com/WordPress/gutenberg/pull/18533) after mouse move.
+* Fix block [drag and drop for the contributor role](https://github.com/WordPress/gutenberg/pull/15054).
+* [Update the link when switching the image used](https://github.com/WordPress/gutenberg/pull/17226) in the Image block.
+* Fix php [error triggered when **gutenberg_register_packages_scripts**](https://github.com/WordPress/gutenberg/pull/18599) is run more than once.
+* Fix special characters [escaping for the post title](https://github.com/WordPress/gutenberg/pull/18616).
+* Fix [JavaScript errors triggered when selectors are called](https://github.com/WordPress/gutenberg/pull/18559) before the editor being initialized.
+* Fix [BaseControl component label](https://github.com/WordPress/gutenberg/pull/18646) when no id is passed.
+* [Preserve whitespace](https://github.com/WordPress/gutenberg/pull/18656) when converting blocks Preformatted and Paragraph blocks.
+* Fix [multiple paste issues](https://github.com/WordPress/gutenberg/pull/17470) creating unnecessary empty spaces.
+
+### New APIs
+
+* Add a new [Card component](https://github.com/WordPress/gutenberg/pull/17963) [to](https://github.com/WordPress/gutenberg/pull/18681) @wordpress/components.
+* Add [label support for the URLInput](https://github.com/WordPress/gutenberg/pull/15669) [component](https://github.com/WordPress/gutenberg/pull/18488).
+* Support the [isMatch option for the shorcode transforms](https://github.com/WordPress/gutenberg/pull/18459).
+
+### Experiments
+
+* Block Content areas:
+ * Add [Post Title and Post Content](https://github.com/WordPress/gutenberg/pull/18461) [blocks](https://github.com/WordPress/gutenberg/pull/18543).
+ * Add [template parts](https://github.com/WordPress/gutenberg/pull/18339) CPT and the theme resolution logic.
+* Widgets Screen:
+ * [Refactor the legacy widgets block](https://github.com/WordPress/gutenberg/pull/15801) to support all blocks.
+ * Fix [widget areas margins](https://github.com/WordPress/gutenberg/pull/18528).
+ * Add [isRTL setting](https://github.com/WordPress/gutenberg/pull/18545).
+* APIs
+ * **useColors** hook: Enhance the [contrast checking API](https://github.com/WordPress/gutenberg/pull/18237) and provide [access to the color value](https://github.com/WordPress/gutenberg/pull/18544).
+ * Introduce [createInterpolateElement](https://github.com/WordPress/gutenberg/pull/17376) to allow translation of complex strings with HTML content.
+ * A11y: Refactor the [accessibility behavior of the Toolbar](https://github.com/WordPress/gutenberg/pull/18534) component.
+* Social Links:
+ * [Capitalize LinkedIn](https://github.com/WordPress/gutenberg/pull/18638) and [GitHub](https://github.com/WordPress/gutenberg/pull/18714) properly.
+ * Fix frontend [styling](https://github.com/WordPress/gutenberg/pull/18410).
+
+### Documentation
+
+* Add a [Backward Compatibility policy](https://github.com/WordPress/gutenberg/pull/18499) document.
+* Clarify the [npm packages release](https://github.com/WordPress/gutenberg/pull/18516) documentation.
+* Add documentation for the [@wordpress/env wp-env.json config file](https://github.com/WordPress/gutenberg/pull/18643).
+* Typos and tweaks: [1](https://github.com/WordPress/gutenberg/pull/18400), [2](https://github.com/WordPress/gutenberg/pull/18404), [3](https://github.com/WordPress/gutenberg/pull/18449), [4](https://github.com/WordPress/gutenberg/pull/18403), [5](https://github.com/WordPress/gutenberg/pull/18452), [6](https://github.com/WordPress/gutenberg/pull/18460), [7](https://github.com/WordPress/gutenberg/pull/18475), [8](https://github.com/WordPress/gutenberg/pull/18507), [9](https://github.com/WordPress/gutenberg/pull/18059), [10](https://github.com/WordPress/gutenberg/pull/17911), [11](https://github.com/WordPress/gutenberg/pull/18558), [12](https://github.com/WordPress/gutenberg/pull/18277), [13](https://github.com/WordPress/gutenberg/pull/18572), [14](https://github.com/WordPress/gutenberg/pull/18587), [15](https://github.com/WordPress/gutenberg/pull/18592), [16](https://github.com/WordPress/gutenberg/pull/18436), [17](https://github.com/WordPress/gutenberg/pull/18446), [18](https://github.com/WordPress/gutenberg/pull/18707), [19](https://github.com/WordPress/gutenberg/pull/18450), [20](https://github.com/WordPress/gutenberg/pull/18713).
+
+### Various
+
+* Refactor the [RichText component](https://github.com/WordPress/gutenberg/pull/17779): Remove the inner Editable component.
+* Integrate [the](https://github.com/WordPress/gutenberg/pull/18514) [Gutenberg Playground](https://github.com/WordPress/gutenberg/pull/18191) into Storybook.
+* Increase [WordPress minimum supported](https://github.com/WordPress/gutenberg/pull/15809) by the plugin to 5.2.0.
+* Refactor the [Paragraph block edit function](https://github.com/WordPress/gutenberg/pull/18125) as a functional component.
+* Refactor the [Cover block edit function](https://github.com/WordPress/gutenberg/pull/18116) as a functional component.
+* Add new components to Storybook.
+ * [RadioControl](https://github.com/WordPress/gutenberg/pull/18474) component.
+ * [TabPanel](https://github.com/WordPress/gutenberg/pull/18402) component.
+ * [Popover](https://github.com/WordPress/gutenberg/pull/18096) component.
+ * [BaseControl](https://github.com/WordPress/gutenberg/pull/18648) component.
+ * [Tip](https://github.com/WordPress/gutenberg/pull/18542) component.
+* Include [WordPress eslint plugin](https://github.com/WordPress/gutenberg/pull/18457) in React eslint ruleset in @wordpress/eslint-plugin.
+* [Block PRs on mobile unit test failures](https://github.com/WordPress/gutenberg/pull/18454) in Travis.
+* Polish the [PostSchedule popover styling](https://github.com/WordPress/gutenberg/pull/18235).
+* Fix the [API documentation generation tool](https://github.com/WordPress/gutenberg/pull/18253) when spaces are used in folder names.
+* Add [missing @babel/runtime dependency](https://github.com/WordPress/gutenberg/pull/18626) to the @wordpress/jest-puppeteer-axe.
+* [Refactor the Layout component](https://github.com/WordPress/gutenberg/pull/18044) [to](https://github.com/WordPress/gutenberg/pull/18658) [separate](https://github.com/WordPress/gutenberg/pull/18683) the UI from the content.
+* Align [Dropdown and DropdownMenu](https://github.com/WordPress/gutenberg/pull/18631) components styling.
+* Remove [max-width style from the Image block](https://github.com/WordPress/gutenberg/pull/14911).
+* Remove the [CollegeHumor embed](https://github.com/WordPress/gutenberg/pull/18591) block.
+* Add unit tests:
+ * Ensure [consecutive edits](https://github.com/WordPress/gutenberg/pull/17917) to the same attribute are considered persistent.
+ * Test the [core-data undo reducer](https://github.com/WordPress/gutenberg/pull/18642).
+
+= 6.9.0 =
+
+### Features
+
+* Support changing the [image title attribute](https://github.com/WordPress/gutenberg/pull/11070) in the Image block.
+
+### Bugs
+
+* Fix [invalid Pullquote blocks](https://github.com/WordPress/gutenberg/pull/18194) when setting a color from the palette presets.
+* Fix the columns left/right [full-width margins](https://github.com/WordPress/gutenberg/pull/18021).
+* Prevent [fast consecutive updates](https://github.com/WordPress/gutenberg/pull/18219) from triggering blocks reset.
+* Fix block [movers for floated blocks](https://github.com/WordPress/gutenberg/pull/18230).
+* Fix [Radio buttons styling](https://github.com/WordPress/gutenberg/pull/18183) in meta boxes.
+* Fix the [default image sizes used for featured images](https://github.com/WordPress/gutenberg/pull/15844) displayed in the editor.
+* Prevent the unsaved changes warning from popping-up when [deleting posts](https://github.com/WordPress/gutenberg/pull/18275).
+* Revert [img and iframe styles](https://github.com/WordPress/gutenberg/pull/18287) to block editor container scope.
+* Block Merge: guard for [undefined attribute definition](https://github.com/WordPress/gutenberg/pull/17937).
+
+### Enhancements
+
+* Inserter: [Immediately insert block](https://github.com/WordPress/gutenberg/pull/16708) when only one block type is allowed.
+* Update the list of the [default available gradients](https://github.com/WordPress/gutenberg/pull/18214).
+* [Disable indent/outdent buttons](https://github.com/WordPress/gutenberg/pull/17819) when necessary in the List block.
+
+### New APIs
+
+* Add theme support API to define [custom gradients presets](https://github.com/WordPress/gutenberg/pull/17841).
+* Mark the [AsyncMode](https://github.com/WordPress/gutenberg/pull/18154) data module API as stable.
+* Mark the [mediaUpload @wordpress/block-editor setting](https://github.com/WordPress/gutenberg/pull/18156) as stable.
+* Add a **wpenv.json** [config file support for](https://github.com/WordPress/gutenberg/pull/18121) [@wordpress/env](https://github.com/WordPress/gutenberg/pull/18294).
+
+### Various
+
+* Refactor the way [HTML is escaped by the RichText](https://github.com/WordPress/gutenberg/pull/17994) component.
+* Refactor and [simplify the block margins CSS](https://github.com/WordPress/gutenberg/pull/18346) in the editor.
+* Use [HTTPS git clone](https://github.com/WordPress/gutenberg/pull/18136) in the Gutenberg release tool for more stability.
+* Update [ExternalLink](https://github.com/WordPress/gutenberg/pull/18142), [BaseControl and FormTokenField](https://github.com/WordPress/gutenberg/pull/18165) components to use the VisuallyHidden component for the screen reader text.
+* Add several components to Storybook:
+ * [Spinner](https://github.com/WordPress/gutenberg/pull/18145),
+ * [Draggable](https://github.com/WordPress/gutenberg/pull/18070),
+ * [RangeControl](https://github.com/WordPress/gutenberg/pull/17846),
+ * [FontSizePicker](https://github.com/WordPress/gutenberg/pull/18149),
+ * [Modal](https://github.com/WordPress/gutenberg/pull/18083),
+ * [Snackbar](https://github.com/WordPress/gutenberg/pull/18386),
+ * [ToggleControl](https://github.com/WordPress/gutenberg/pull/18388),
+ * [ResizableBox](https://github.com/WordPress/gutenberg/pull/18097/files).
+* Refactor the [block-directory search to insert](https://github.com/WordPress/gutenberg/pull/17576) as an Inserter plugin.
+* Improve the experimental [useColors React](https://github.com/WordPress/gutenberg/pull/18147) [hook](https://github.com/WordPress/gutenberg/pull/18286).
+* Upgrade [Puppeteer](https://github.com/WordPress/gutenberg/pull/18205) to the last version.
+* Update to the [last version of npm-package-json-lint](https://github.com/WordPress/gutenberg/pull/18160).
+* **i18n**: Fix string concatenation in the [Verse block example](https://github.com/WordPress/gutenberg/pull/18365) and add `translators` string.
+* Change Detection: Add an [e2e test case for post trashing](https://github.com/WordPress/gutenberg/pull/18290).
+* Fix the [e2e tests watch command](https://github.com/WordPress/gutenberg/pull/18391).
+
+### Experimental
+
+* Block Content Areas:
+ * Support [loading block templates](https://github.com/WordPress/gutenberg/pull/18247) from themes.
+* Navigation block:
+ * Add [default frontend styles](https://github.com/WordPress/gutenberg/pull/18094) for the Navigation block.
+ * Use [RichText for navigation menu item](https://github.com/WordPress/gutenberg/pull/18182) instead of TextControl.
+ * Add [block navigator](https://github.com/WordPress/gutenberg/pull/18202) to the inspector panel.
+ * Use an [SVG icon](https://github.com/WordPress/gutenberg/pull/18222) for the color selector.
+ * Add a new API for [horizontal movers](https://github.com/WordPress/gutenberg/pull/16615) and [use](https://github.com/WordPress/gutenberg/pull/18234) it for the navigation block.
+ * Add a new [Link creation](https://github.com/WordPress/gutenberg/pull/17846) [and](https://github.com/WordPress/gutenberg/pull/18405) [edition](https://github.com/WordPress/gutenberg/pull/18225) [UI](https://github.com/WordPress/gutenberg/pull/18285) and [use](https://github.com/WordPress/gutenberg/pull/18062) it for the navigation block.
+ * Add an [appender](https://github.com/WordPress/gutenberg/pull/18100) to the block navigator.
+ * Add a block [placeholder](https://github.com/WordPress/gutenberg/pull/18363).
+ * Various fixes and refactorings: [1](https://github.com/WordPress/gutenberg/pull/18189), [2](https://github.com/WordPress/gutenberg/pull/18178), [3](https://github.com/WordPress/gutenberg/pull/18188), [4](https://github.com/WordPress/gutenberg/pull/18153), [5](https://github.com/WordPress/gutenberg/pull/18221), [6](https://github.com/WordPress/gutenberg/pull/18278), [7](https://github.com/WordPress/gutenberg/pull/18172), [8](https://github.com/WordPress/gutenberg/pull/18346), [9](https://github.com/WordPress/gutenberg/pull/18376), [10](https://github.com/WordPress/gutenberg/pull/18150), [11](https://github.com/WordPress/gutenberg/pull/18292), [12](https://github.com/WordPress/gutenberg/pull/18374), [13](https://github.com/WordPress/gutenberg/pull/18367), [14](https://github.com/WordPress/gutenberg/pull/18350), [15](https://github.com/WordPress/gutenberg/pull/18412).
+* Add [ResponsiveBlockControl](https://github.com/WordPress/gutenberg/pull/16790) component.
+* Add initial [API for block patterns](https://github.com/WordPress/gutenberg/pull/18270).
+
+### Documentation
+
+* Add an introduction [README for Storybook](https://github.com/WordPress/gutenberg/pull/18245).
+* Typos and fixes: [1](https://github.com/WordPress/gutenberg/pull/18187), [2](https://github.com/WordPress/gutenberg/pull/18198), [3](https://github.com/WordPress/gutenberg/pull/18204https://github.com/WordPress/gutenberg/pull/18204), [4](https://github.com/WordPress/gutenberg/pull/18218), [5](https://github.com/WordPress/gutenberg/pull/18221), [6](https://github.com/WordPress/gutenberg/pull/18226).
+
+
+= 6.8.0 =
+
+### Features
+
+* [Support gradients](https://github.com/WordPress/gutenberg/pull/18001) in Cover block.
+* Add a breadcrumb bar to support [block hierarchy selection](https://github.com/WordPress/gutenberg/pull/17838).
+
+### Enhancements
+
+* Cover block: change the [minimum height input step size](https://github.com/WordPress/gutenberg/pull/17927) to one.
+* Allow setting a [display name for blocks](https://github.com/WordPress/gutenberg/pull/17519) based on their content in the BlockNavigator.
+* [Hide the gradients panel](https://github.com/WordPress/gutenberg/pull/18091) if an empty set of gradients is explicitly defined.
+* [Do not transform list items into paragraphs](https://github.com/WordPress/gutenberg/pull/18032) when deleting first list item and list is not empty.
+* Replace inline styles with [classnames for the gradient palette](https://github.com/WordPress/gutenberg/pull/18008).
+* [Preserve list attributes](https://github.com/WordPress/gutenberg/pull/17144) (start, type and reversed) when pasting or converting HTML to blocks.
+
+### Bugs
+
+* [Clear local autosaves](https://github.com/WordPress/gutenberg/pull/18051) after successful saves.
+* Fix the [columns block](https://github.com/WordPress/gutenberg/pull/17968) width overflow issue when using more than two columns.
+* Fix the [Link Rel input](https://github.com/WordPress/gutenberg/pull/17398) not showing the saved value of the link rel attribute.
+* Fix JavaScript errors triggered when using [links without href](https://github.com/WordPress/gutenberg/pull/17928) in HTML mode.
+* Move the [default list styles](https://github.com/WordPress/gutenberg/pull/17958) to the theme editor styles.
+* Fix [Invalid import](https://github.com/WordPress/gutenberg/pull/17969) statement for deprecated call in the Modal component.
+* Fix a small visual glitch in the [Publish button](https://github.com/WordPress/gutenberg/pull/18016).
+* Prevent blank page when using the [Media Modal Edit Image "back"](https://github.com/WordPress/gutenberg/pull/18007) button.
+* Allow the [shortcode transform](https://github.com/WordPress/gutenberg/pull/17925) to apply to all the provided shortcode aliases.
+* Fix JavaScript error triggered when using arrows on an [empty URLInput](https://github.com/WordPress/gutenberg/pull/18088).
+* Fix [extra margins added to Gallery blocks](https://github.com/WordPress/gutenberg/pull/18019) by list editor styles.
+* Fix [custom button background color](https://github.com/WordPress/gutenberg/pull/18037) not reflected on reload.
+* [Preserve List block attributes](https://github.com/WordPress/gutenberg/pull/18102) when splitting into multiple lists.
+* Fix [checkbox styles](https://github.com/WordPress/gutenberg/pull/18108) when used in metaboxes.
+* Make the [FontSizePicker style](https://github.com/WordPress/gutenberg/pull/18078) independent from WordPress core styles.
+* Fix overlapping controls in the [Inline Image formatting toolbar](https://github.com/WordPress/gutenberg/pull/18090).
+* Fix [strikethrough formatting](https://github.com/WordPress/gutenberg/pull/17187) when copy/pasting from Google Docs in Safari.
+* Allow [media upload post processing](https://github.com/WordPress/gutenberg/pull/18106) for all 5xx REST API responses.
+
+## Experiments
+
+* Navigation block:
+ * Support [color customization](https://github.com/WordPress/gutenberg/pull/17832).
+ * Improve the [Link edition UI](https://github.com/WordPress/gutenberg/pull/17986).
+* Block Content Areas:
+ * Implement a frontend [template loader](https://github.com/WordPress/gutenberg/pull/17626) based on the **wp_template** CPT.
+ * Add a temporary [UI to edit **wp_template**](https://github.com/WordPress/gutenberg/pull/17625) CPT posts.
+ * Add a [Site title block](https://github.com/WordPress/gutenberg/pull/17207).
+
+### New APIs
+
+* Add [VisuallyHidden](https://github.com/WordPress/gutenberg/pull/18022) component.
+* Add [**@wordpress/base-styles**](https://github.com/WordPress/gutenberg/pull/17883) package to share the common variables/mixins used by the WordPress packages.
+* Add [Platform component](https://github.com/WordPress/gutenberg/pull/18058) to allow writing platform (web, mobile) specific logic.
+* Add isInvalidDate prop to [DatePicker](https://github.com/WordPress/gutenberg/pull/17498).
+* @wordpress/env improvements:
+ * Support [custom ports](https://github.com/WordPress/gutenberg/pull/17697).
+ * Support using it for [themes](https://github.com/WordPress/gutenberg/pull/17732).
+* Add a new experimental React hook to [support colors in blocks](https://github.com/WordPress/gutenberg/pull/16781).
+* Add a new experimental [DimentionControl](https://github.com/WordPress/gutenberg/pull/16791) component.
+
+### Various
+
+* Storybook:
+ * Add a story for the [CheckboxControl](https://github.com/WordPress/gutenberg/pull/17891) component.
+ * Add a story for the [Dashicon](https://github.com/WordPress/gutenberg/pull/18027) component.
+ * Add a story for the [ColorPalette](https://github.com/WordPress/gutenberg/pull/17997) component.
+ * Add a story for the [ColorPicker](https://github.com/WordPress/gutenberg/pull/18013) component.
+ * Add a story for the [ExternalLink](https://github.com/WordPress/gutenberg/pull/18084) component.
+
+Add knobs to the [ColorIndicator Story](https://github.com/WordPress/gutenberg/pull/18015).
+
+* Several other [enhancements to existing stories](https://github.com/WordPress/gutenberg/pull/18030).
+* [Linting fixes](https://github.com/WordPress/gutenberg/pull/17981) for Storybook config.
+* Fix Lint warnings triggered by [JSDoc definitions](https://github.com/WordPress/gutenberg/pull/18025).
+* [Reorganize e2e tests](https://github.com/WordPress/gutenberg/pull/17990) [specs](https://github.com/WordPress/gutenberg/pull/18020) into three folders: editor, experimental and plugin.
+* Cleanup [skipped e2e tests](https://github.com/WordPress/gutenberg/pull/18003).
+* Add a [link to Storybook](https://github.com/WordPress/gutenberg/pull/17982) from the Gutenberg playground.
+* Optimize the **@wordpress/compose** package to [support tree-shaking](https://github.com/WordPress/gutenberg/pull/17945).
+* Code Quality:
+ * Refactor the [Button block edit function](https://github.com/WordPress/gutenberg/pull/18006) to use a functional component.
+ * Change the name of the [accumulated variables](https://github.com/WordPress/gutenberg/pull/17893) in reduce functions.
+ * Remove wrapper around the [Table block cells](https://github.com/WordPress/gutenberg/pull/17711).
+* Fix several issues related to [Node 12](https://github.com/WordPress/gutenberg/pull/18054) [becoming](https://github.com/WordPress/gutenberg/pull/18057) LTS.
+* Add the [Block Inspector](https://github.com/WordPress/gutenberg/pull/18077) to the Gutenberg playground.
+
+### Documentation
+
+* Enhance the [Git workflow](https://github.com/WordPress/gutenberg/pull/17662) documentation.
+* Clarify [block naming conventions](https://github.com/WordPress/gutenberg/pull/18117).
+* Tweaks and typos: [1](https://github.com/WordPress/gutenberg/pull/17980), [2](https://github.com/WordPress/gutenberg/pull/18039).
+
+= 6.7.0 =
+
+### Features
+
+* Add [gradient backgrounds support](https://github.com/WordPress/gutenberg/pull/17169) to the Button block.
+
+### Bug Fixes
+
+* i18n : Include the plural version of the “[remove block](https://github.com/WordPress/gutenberg/pull/17665)” string.
+* Update dropdown menu items to match [hover](https://github.com/WordPress/gutenberg/pull/17621) [style](https://github.com/WordPress/gutenberg/pull/17581) in other places.
+* Smoothly [reposition Popovers on scroll](https://github.com/WordPress/gutenberg/pull/17699).
+* Fix [margin styles for Gallery](https://github.com/WordPress/gutenberg/pull/17694) and Social links blocks.
+* Fix [popovers hidden on mobile](https://github.com/WordPress/gutenberg/pull/17696).
+* Ensure [sidebar plugins do not get auto-closed](https://github.com/WordPress/gutenberg/pull/17712) when opened on small screens.
+* Fix the design of the [Checkbox component in IE11](https://github.com/WordPress/gutenberg/pull/17714).
+* Add [has-text-color](https://github.com/WordPress/gutenberg/pull/17742) classname to heading block.
+* Prevent [figure margin reset CSS](https://github.com/WordPress/gutenberg/pull/17737) from being included in the frontend.
+* Fix the [scaling of the pinned plugins menu icons](https://github.com/WordPress/gutenberg/pull/17752).
+* Fix [Heading and paragraph colors](https://github.com/WordPress/gutenberg/pull/17728) not applied inside the cover block.
+* [Close Nux tips](https://github.com/WordPress/gutenberg/pull/17663) when clicking outside the tip.
+* Fix [meta attribute source](https://github.com/WordPress/gutenberg/pull/17820) for post types other than post.
+* Fix ”[Open in New Tab](https://github.com/WordPress/gutenberg/pull/17794)” not being persisted.
+* Fix [redo](https://github.com/WordPress/gutenberg/pull/17827) [behavior](https://github.com/WordPress/gutenberg/pull/17861) and expand test coverage.
+* I18n: Fix missing translation for the [“All content copied” string](https://github.com/WordPress/gutenberg/pull/17828).
+* Fix the [block preview padding](https://github.com/WordPress/gutenberg/pull/17807) in themes with custom backgrounds.
+* Fix [merging list blocks](https://github.com/WordPress/gutenberg/pull/17845) with indented list items.
+* Fix [inline image controls](https://github.com/WordPress/gutenberg/pull/17750) display condition.
+* Fix clicking the [redirect element](https://github.com/WordPress/gutenberg/pull/17798) focuses the inserted paragraph.
+* Fix [editing meta attributes](https://github.com/WordPress/gutenberg/pull/17850) with multiple set to true.
+* Add [No Preview Available](https://github.com/WordPress/gutenberg/pull/17848) text to the inserter preview panel.
+* [Prevent block controls from disappearing](https://github.com/WordPress/gutenberg/pull/17876) when switching the List block type.
+* Avoid [trailing space](https://github.com/WordPress/gutenberg/pull/17842) at the end of a translatable string.
+* Fix [left aligned nested blocks](https://github.com/WordPress/gutenberg/pull/17804).
+* Fix the top margin of the [RadioControl help text](https://github.com/WordPress/gutenberg/pull/17677).
+* Fix [invalid HTML](https://github.com/WordPress/gutenberg/pull/17754) used in the Featured Image panel.
+* Make sure that all [edits after saving](https://github.com/WordPress/gutenberg/pull/17888) are considered persistent by default.
+* Ensure that [sidebar is closed on the first visit](https://github.com/WordPress/gutenberg/pull/17902) on small screens.
+* Update the [columns block example](https://github.com/WordPress/gutenberg/pull/17904) to avoid overlapping issues.
+* Remove unnecessary default styles for [H2 heading inside Cover blocks](https://github.com/WordPress/gutenberg/pull/17815).
+* Fix [Media & Text block alignment](https://github.com/WordPress/gutenberg/pull/10812) in IE11.
+* Remove [unnecessary padding](https://github.com/WordPress/gutenberg/pull/17907https://github.com/WordPress/gutenberg/pull/17907) in the Columns block.
+* Fix the [Columns block height](https://github.com/WordPress/gutenberg/pull/17901) in IE11.
+* Correctly update [RichText value after undo](https://github.com/WordPress/gutenberg/pull/17840).
+* Prevent the [snackbar link components](https://github.com/WordPress/gutenberg/pull/17887) from hiding on focus.
+* Fix [block toolbar position](https://github.com/WordPress/gutenberg/pull/17894) in IE11.
+* Retry [uploading images](https://github.com/WordPress/gutenberg/pull/17858) on failures.
+
+### Performance
+
+* Avoid [continuously reset browser selection](https://github.com/WordPress/gutenberg/pull/17869) (improve typing performance in iOS).
+
+### Enhancements
+
+* Polish [FontSize Picker design](https://github.com/WordPress/gutenberg/pull/17647).
+* Use body color for the [post publish panel](https://github.com/WordPress/gutenberg/pull/17731).
+* Limit the width and height of the [pinnable plugins icons](https://github.com/WordPress/gutenberg/pull/17722).
+* Add a [max width to the Search block](https://github.com/WordPress/gutenberg/pull/17648) input.
+
+### Experiments
+
+* Menu Navigation block:
+* Implement initial state containing [top level pages](https://github.com/WordPress/gutenberg/pull/17637).
+* Fix [menu alignment](https://github.com/WordPress/gutenberg/pull/17630).
+* Fix the [classname](https://github.com/WordPress/gutenberg/pull/17853) in frontend.
+* Block Directory
+* Change the [relative time string](https://github.com/WordPress/gutenberg/pull/17535).
+* Widgets Screen
+* Fix the [styling of the inspector panel](https://github.com/WordPress/gutenberg/pull/17880).
+
+### Documentation
+
+* Fix [@wordpress/data-controls examples](https://github.com/WordPress/gutenberg/pull/17773).
+* Typos and tweaks: [1](https://github.com/WordPress/gutenberg/pull/17821), [2](https://github.com/WordPress/gutenberg/pull/17909).
+
+### Various
+
+* Introduce the [@wordpress/env](https://github.com/WordPress/gutenberg/pull/17668) package, A zero-config, self-contained local WordPress environment for development and testing.
+* Add [Storybook](https://github.com/WordPress/gutenberg/pull/17475) [to](https://github.com/WordPress/gutenberg/pull/17762) develop and showcase UI components:
+* [Add](https://github.com/WordPress/gutenberg/pull/17910) [ButtonGroup](https://github.com/WordPress/gutenberg/pull/17884) component.
+* Add [ScrollLock](https://github.com/WordPress/gutenberg/pull/17886) component.
+* Add [Animate](https://github.com/WordPress/gutenberg/pull/17890https://github.com/WordPress/gutenberg/pull/17890) component.
+* Add [Icon and IconButton](https://github.com/WordPress/gutenberg/pull/17868) components.
+* Add [ClipboardButton](https://github.com/WordPress/gutenberg/pull/17913) component.
+* Add [ColorIndicator](https://github.com/WordPress/gutenberg/pull/17924) component.
+* [Remove RichText](https://github.com/WordPress/gutenberg/pull/17607) [wrapper](https://github.com/WordPress/gutenberg/pull/17713) and use Popover for the inline toolbar.
+* Improve the way the [lock file](https://github.com/WordPress/gutenberg/pull/17705) handles local dependencies.
+* Refactor [ColorPalette](https://github.com/WordPress/gutenberg/pull/17154) by extracting its design.
+* Improve [E2E test reliability](https://github.com/WordPress/gutenberg/pull/17679) by consuming synchronous data and bailing on save failure.
+* Replace the [isDismissable prop with isDismissible](https://github.com/WordPress/gutenberg/pull/17689) in the Modal component.
+* Add eslint-plugin-jest to the default @wordpress/scripts [linting config](https://github.com/WordPress/gutenberg/pull/17744).
+* Update @wordpress/scripts to use the [latest version of webpack](https://github.com/WordPress/gutenberg/pull/17753) for build and start commands.
+* Cleanup [Dashicon component](https://github.com/WordPress/gutenberg/pull/17741).
+* Update the [Excerpt help link](https://github.com/WordPress/gutenberg/pull/17753).
+* [Release tool](https://github.com/WordPress/gutenberg/pull/17717): fix wrong package.json used when bumping the stable released version.
+* Fix several [typos](https://github.com/WordPress/gutenberg/pull/17666) in [code](https://github.com/WordPress/gutenberg/pull/17800) and [files](https://github.com/WordPress/gutenberg/pull/17782).
+* Update [E2E tests](https://github.com/WordPress/gutenberg/pull/17859) to accommodate WP 5.3 Beta 3 changes.
+* Define the “[sideEffects](https://github.com/WordPress/gutenberg/pull/17862)” property for @wordpress packages.
+* Add [nested embed e2e test](https://github.com/WordPress/gutenberg/pull/15909).
+* I18N: Always return the [translation file](https://github.com/WordPress/gutenberg/pull/17900) prefixed with `gutenberg-`.
+* Use [wp.org CDN for images](https://github.com/WordPress/gutenberg/pull/17935) used in block preview.
+
+= 6.6.0 =
+
+### Enhancements
+
+- Turn [Stack on mobile toggle on by default](https://github.com/WordPress/gutenberg/pull/14364) in the Media & Text block.
+- Only show the Inserter [help panel in the topbar inserter](https://github.com/WordPress/gutenberg/pull/17545).
+- Use minimum height instead of height for [Cover height control label](https://github.com/WordPress/gutenberg/pull/17634).
+- Update the [buttons](https://github.com/WordPress/gutenberg/pull/17645) [styling](https://github.com/WordPress/gutenberg/pull/17651) to match core.
+- Add [preview examples](https://github.com/WordPress/gutenberg/pull/17493) for multiple core blocks.
+
+### New APIs
+
+- Implement [EntityProvider](https://github.com/WordPress/gutenberg/pull/17153) and use it to refactor the meta block attributes.
+
+### Experimental
+
+- Introduce the [wp_template custom post type](https://github.com/WordPress/gutenberg/pull/17513) to preempt the block content areas work.
+- Use the [entities store for the widgets](https://github.com/WordPress/gutenberg/pull/17319) screen.
+
+### Bugs
+
+- Fix javascript error potentially triggered when using [saveEntityRecord action](https://github.com/WordPress/gutenberg/pull/17492).
+- Avoid marking the [post as dirty when forcing an undo level](https://github.com/WordPress/gutenberg/pull/17487) (RichText).
+- Fix [Post Publish Panel overlapping the user profile](https://github.com/WordPress/gutenberg/pull/17075) dropdown menu.
+- Fix and align [collapsing logic for Save Draft and Saved](https://github.com/WordPress/gutenberg/pull/17506) button states.
+- [Remove Reusable block name and description](https://github.com/WordPress/gutenberg/pull/17530) from the inserter help panel.
+- Fix spacing issues in the [inserter panel previews](https://github.com/WordPress/gutenberg/pull/17531).
+- Gallery block: [Don't show the caption gradient overlay](https://github.com/WordPress/gutenberg/pull/17561) unless image is selected or a caption is set.
+- Gallery block: Fix [custom alignment layouts](https://github.com/WordPress/gutenberg/pull/17586)
+- Fix [dirtiness detection when server-side saving filters](https://github.com/WordPress/gutenberg/pull/17532) are used.
+- Remove [wrong i18n](https://github.com/WordPress/gutenberg/pull/17546) [domain](https://github.com/WordPress/gutenberg/pull/17591).
+- Fix [invalid block warning](https://github.com/WordPress/gutenberg/pull/17572) panel.
+- Fix various issues in related to the [BlockDirectory inserter](https://github.com/WordPress/gutenberg/pull/17517).
+- Cover block: [Show Height control](https://github.com/WordPress/gutenberg/pull/17371) only if an image background is selected.
+- Fix [RichText composition input](https://github.com/WordPress/gutenberg/pull/17610) issues.
+- Fix [block placeholders spacing](https://github.com/WordPress/gutenberg/pull/17616) after Core inputs updates.
+- Fix [checkbox design](https://github.com/WordPress/gutenberg/pull/17571) (color and background) after Core updates.
+- Fix [radio buttons design](https://github.com/WordPress/gutenberg/pull/17613) after Core updates.
+- Remove any existing subscriptions before adding a new save metaboxes sub to [prevent multiple saves](https://github.com/WordPress/gutenberg/pull/17522).
+- [Clear auto-draft titles](https://github.com/WordPress/gutenberg/pull/17633) on save if not changed explicitly.
+- Fix [block error boundary](https://github.com/WordPress/gutenberg/pull/17602).
+- Fix [select elements](https://github.com/WordPress/gutenberg/pull/17646) design in the sidebar after Core updates.
+- Allow using [space with modifier keys](https://github.com/WordPress/gutenberg/pull/17611) at the beginning of list items.
+- Fix the [inputs height](https://github.com/WordPress/gutenberg/pull/17659) after Core updates.
+- fix conflict between [remote and local autosaves](https://github.com/WordPress/gutenberg/pull/17501).
+
+### Performance
+
+- Request the [Image block’s metadata](https://github.com/WordPress/gutenberg/pull/17504) only if the block is selected.
+- Improve the performance of the [block reordering animation in Safari](https://github.com/WordPress/gutenberg/pull/17573).
+- Remove [Autocomplete component wrappers](https://github.com/WordPress/gutenberg/pull/17580).
+
+### Various
+
+- [Replace registered social links blocks](https://github.com/WordPress/gutenberg/pull/17494) if already registered in Core.
+- More stable [List block e2e](https://github.com/WordPress/gutenberg/pull/17482) [tests](https://github.com/WordPress/gutenberg/pull/17599).
+- Add e2e tests to validate the [date picker UI](https://github.com/WordPress/gutenberg/pull/17490) behavior.
+- Add e2e tests to validate the [local auto-save](https://github.com/WordPress/gutenberg/pull/17503) behavior.
+- Mark the [social links block as experimental](https://github.com/WordPress/gutenberg/pull/17526).
+- [Update the e2e tests](https://github.com/WordPress/gutenberg/pull/17566) to accommodate the new theme.
+- Align the [version of lodash](https://github.com/WordPress/gutenberg/pull/17528) with WordPress core.
+- Add phpcs rule to [detect unused variables](https://github.com/WordPress/gutenberg/pull/17300).
+- Simplify [Block Selection Reducer](https://github.com/WordPress/gutenberg/pull/17467).
+- Add [has-background classes](https://github.com/WordPress/gutenberg/pull/17529) to pullquote and Media & Text blocks for consistency.
+- Tidy up [button vertical align styles](https://github.com/WordPress/gutenberg/pull/17601).
+- Update [browserslist](https://github.com/WordPress/gutenberg/pull/17643) dependency.
+
+### Documentation
+
+- Add [scripts/styles dependency management](https://github.com/WordPress/gutenberg/pull/17489) documentation.
+- Update [docs with the example property](https://github.com/WordPress/gutenberg/pull/17507) used for Inserter previews.
+- Typos and tweaks: [1](https://github.com/WordPress/gutenberg/pull/17449), [2](https://github.com/WordPress/gutenberg/pull/17499), [3](https://github.com/WordPress/gutenberg/pull/17514), [4](https://github.com/WordPress/gutenberg/pull/17502), [5](https://github.com/WordPress/gutenberg/pull/17595).
+
+### Mobile
+
+- Add [rounded corners on media placeholder](https://github.com/WordPress/gutenberg/pull/16729) and unsupported blocks.
+- Fix link editing when the [cursor is at the beginning of a link](https://github.com/WordPress/gutenberg/pull/17631).
+
+= 6.5.0 =
+
+### Features
+* Add a [new](https://github.com/WordPress/gutenberg/pull/17402) [Social links](https://github.com/WordPress/gutenberg/pull/16897) [block](https://github.com/WordPress/gutenberg/pull/17380).
+* Support [border radius changes](https://github.com/WordPress/gutenberg/pull/17253) in the Button block.
+* Support [adding a caption to the Gallery block](https://github.com/WordPress/gutenberg/pull/17101).
+* Support [local autosaves](https://github.com/WordPress/gutenberg/pull/16490).
+### Enhancements
+* [Disable the click-through](https://github.com/WordPress/gutenberg/pull/17239) behavior in desktop.
+* Update the [labels width](https://github.com/WordPress/gutenberg/pull/14478) to fit their content.
+* Avoid displaying console warnings when [blocks are upgraded using deprecated versions](https://github.com/WordPress/gutenberg/pull/16862).
+* Reduce the [padding around the in-between block inserter](https://github.com/WordPress/gutenberg/pull/17136).
+* Improve the design of [the](https://github.com/WordPress/gutenberg/pull/17315) [block movers](https://github.com/WordPress/gutenberg/pull/17216).
+* Align the [Gallery block image](https://github.com/WordPress/gutenberg/pull/17316) [controls](https://github.com/WordPress/gutenberg/pull/17374) with the block movers design.
+* [Remove child blocks](https://github.com/WordPress/gutenberg/pull/17128) from the block manager.
+* [Remove duplicated "Enable" label](https://github.com/WordPress/gutenberg/pull/17375) from the options panel.
+* Use [sentence case](https://github.com/WordPress/gutenberg/pull/17336) for all tooltips.
+* [Remove the forced gray scale](https://github.com/WordPress/gutenberg/pull/17415) from the category icons.
+* Move the [alignment controls to toolbar of the Heading](https://github.com/WordPress/gutenberg/pull/17419) block.
+* Use the [featured image frame](https://github.com/WordPress/gutenberg/pull/17410) in the Media modal.
+### Bug Fixes
+* Update the [Post Schedule label](https://github.com/WordPress/gutenberg/pull/15757) to correctly reflect the date and time display settings.
+* Clean up the [block toolbar position](https://github.com/WordPress/gutenberg/pull/17197) for wide full blocks.
+* Fix the [cropped focus indicator](https://github.com/WordPress/gutenberg/pull/17215) in the block inserter.
+* Browser incompatibilities:
+ * [Fallback to setTimeout in RichText](https://github.com/WordPress/gutenberg/pull/17213) if no requestIdleCallback is not supported.
+ * [Block toolbar fixes](https://github.com/WordPress/gutenberg/pull/17214) for IE11.
+ * Fix [Backspace usage in RichText](https://github.com/WordPress/gutenberg/pull/17256) for IE11.
+* Prevent clicking the [next/previous month in the Post Schedule](https://github.com/WordPress/gutenberg/pull/17201) popover from closing it.
+* Prevent the [private posts from triggering the unsaved changes](https://github.com/WordPress/gutenberg/pull/17210) [warnings](https://github.com/WordPress/gutenberg/pull/17257) after saving.
+* Fix the usage of the [useReducedMotion hook in Node.js](https://github.com/WordPress/gutenberg/pull/17165) context.
+* A11y:
+ * Use [darker form field borders](https://github.com/WordPress/gutenberg/pull/17218).
+ * Fix the [modal escape key propagation](https://github.com/WordPress/gutenberg/pull/17297).
+ * [Move focus back from the Modal to the More Menu](https://github.com/WordPress/gutenberg/pull/16964) when it was used to open the Modal.
+* [Trim leading and trailing whitespaces](https://github.com/WordPress/gutenberg/pull/17320) when inserting links.
+* Prevent using the paragraph block when [pasting unformatted text into RichText](https://github.com/WordPress/gutenberg/pull/17140).
+* Fix styling of [classic block's block controls](https://github.com/WordPress/gutenberg/pull/17323).
+* Fix the [showing/hiding logic of the **Group** menu item](https://github.com/WordPress/gutenberg/pull/17353) in the block settings menu.
+* Fix [invalid HTML nesting](https://github.com/WordPress/gutenberg/pull/17342) of buttons.
+* Fix [React warning when using withFocusReturn](https://github.com/WordPress/gutenberg/pull/17354) Higher-order component.
+* Fix [lengthy content cuts](https://github.com/WordPress/gutenberg/pull/17365) in the Cover block.
+* Disable [multi-selection when resizing](https://github.com/WordPress/gutenberg/pull/17359).
+* Fix the [permalink UI in RTL](https://github.com/WordPress/gutenberg/pull/13919) languages.
+* Fix multiple issues related to the [reusable blocks](https://github.com/WordPress/gutenberg/pull/14367) editing/previewing UI.
+* Remove filter that [unsets auto-draft titles](https://github.com/WordPress/gutenberg/pull/17317).
+* Fix the [Move to trash](https://github.com/WordPress/gutenberg/pull/17427) button redirection.
+* Prevent [undo/redo history cleaning on autosaves](https://github.com/WordPress/gutenberg/pull/17420).
+* Add i18n support for title [Content Blocks string](https://github.com/WordPress/gutenberg/pull/17435).
+* Add missing extra [classnames to the Column block](https://github.com/WordPress/gutenberg/pull/17422).
+* Fix JavaScript error triggered when using a [multi-line RichText](https://github.com/WordPress/gutenberg/pull/17447).
+* Fix [RichText](https://github.com/WordPress/gutenberg/pull/17451) [focus](https://github.com/WordPress/gutenberg/pull/17450) related issues.
+* Fix [undo levels](https://github.com/WordPress/gutenberg/pull/17259) [inconsistencies](https://github.com/WordPress/gutenberg/pull/17452).
+* Fix [multiple post meta fields edits](https://github.com/WordPress/gutenberg/pull/17455).
+* Fix [selecting custom colors](https://github.com/WordPress/gutenberg/pull/17381) in RTL languages.
+### Experiments
+* Add [one-click search and install blocks](https://github.com/WordPress/gutenberg/pull/17431) from the block directory to the inserter.
+* Refactor the [Navigation block](https://github.com/WordPress/gutenberg/pull/16796) [to](https://github.com/WordPress/gutenberg/pull/17343) [be](https://github.com/WordPress/gutenberg/pull/17328) a dynamic block.
+* Add a [block navigator to the Navigation](https://github.com/WordPress/gutenberg/pull/17265) [block](https://github.com/WordPress/gutenberg/pull/17446).
+* Only show the [customizer block based widgets](https://github.com/WordPress/gutenberg/pull/16956) if the experimental widget screen is enabled.
+### APIs
+* Add a [disableDropZone prop for MediaPlaceholder](https://github.com/WordPress/gutenberg/pull/17077) component.
+* Add [post autosave locking](https://github.com/WordPress/gutenberg/pull/16249).
+* [PluginPrePublishPanel](https://github.com/WordPress/gutenberg/pull/16378) and [PluginPostPublishPanel](https://github.com/WordPress/gutenberg/pull/16383) support icon prop and inherits from registerPlugin.
+* Allow [disabling the Post Status](https://github.com/WordPress/gutenberg/pull/17117) settings panel.
+* Restore the [keepPlaceholderOnFocus](https://github.com/WordPress/gutenberg/pull/17439) [RichText](https://github.com/WordPress/gutenberg/pull/17445) prop.
+### Various
+* Upgrade [React and React DOM](https://github.com/WordPress/gutenberg/pull/16982) to 16.9.0.
+* Add [TypeScript JSDoc linting](https://github.com/WordPress/gutenberg/pull/17014) to the @wordpress/url package.
+* Run [npm audit](https://github.com/WordPress/gutenberg/pull/17192) to fix the reported vulnerabilities.
+* Switch the local environment to an [environment based on the](https://github.com/WordPress/gutenberg/pull/17004) [Core setup](https://github.com/WordPress/gutenberg/pull/17296).
+* Set a constant namespace for [module sourcemaps](https://github.com/WordPress/gutenberg/pull/17024).
+* [Refactor the loading animation](https://github.com/WordPress/gutenberg/pull/17106) to rely on the Animate component.
+* Code improvements to [block PHP files](https://github.com/WordPress/gutenberg/pull/17288).
+* Enable the [duplicate style property](https://github.com/WordPress/gutenberg/pull/17287) linting rule.
+* Update [Husky & Lint-staged](https://github.com/WordPress/gutenberg/pull/17310) to the latest versions.
+* Restore the usage of the [latest npm version](https://github.com/WordPress/gutenberg/pull/17171) in CI.
+* Add [ESLint as peer dependency to eslint-plugin](https://github.com/WordPress/gutenberg/pull/17417).
+* [Conditionally include the block styles](https://github.com/WordPress/gutenberg/pull/17429) functionality to avoid conflicts with Core.
+* Add missing [deprecated setFocusedElement prop](https://github.com/WordPress/gutenberg/pull/17421) to the RichText component.
+* Support [generating assets in PHP format](https://github.com/WordPress/gutenberg/pull/17298) in the webpack dependency extraction plugin.
+### Documentation
+* Update the [reviews and merging documentation](https://github.com/WordPress/gutenberg/pull/16915).
+* Fix [type docs](https://github.com/WordPress/gutenberg/pull/17206) for the Notices package.
+* Add a link to the [fixtures tests document](https://github.com/WordPress/gutenberg/pull/17283) in the Testing Overview.
+* Adds documentation for the [onClose prop of MediaUpload](https://github.com/WordPress/gutenberg/pull/17403).
+* Tweaks and typos: [1](https://github.com/WordPress/gutenberg/pull/17097), [2](https://github.com/WordPress/gutenberg/pull/17285), [3](https://github.com/WordPress/gutenberg/pull/17292), [4](https://github.com/WordPress/gutenberg/pull/17286), [5](https://github.com/WordPress/gutenberg/pull/17304), [6](https://github.com/WordPress/gutenberg/pull/17349), [7](https://github.com/WordPress/gutenberg/pull/17377), [8](https://github.com/WordPress/gutenberg/pull/17436).
+
+
+= 6.4.0 =
+
+### Features
+- Add the option to [select the style that is automatically applied](https://github.com/WordPress/gutenberg/pull/16465).
+- Add the option to [resize Cover Block ](https://github.com/WordPress/gutenberg/pull/17143).
+- Allow directly setting a [solid background color on Cover](https://github.com/WordPress/gutenberg/pull/17041) block.
+- Add [list start, reversed settings](https://github.com/WordPress/gutenberg/pull/15113).
+- Add a [help panel to the inserter available in all blocks](https://github.com/WordPress/gutenberg/pull/16813).
+- [Typewriter experience](https://github.com/WordPress/gutenberg/pull/16460).
+- Add [circle-crop variation](https://github.com/WordPress/gutenberg/pull/16475) to Image block.
+
+### Enhancements
+- Add [overflow support inside block switcher](https://github.com/WordPress/gutenberg/pull/16984).
+- Update [GitHub action exit codes.](https://github.com/WordPress/gutenberg/pull/17002)
+- Core Data: [return updated record in saveEntityRecord](https://github.com/WordPress/gutenberg/pull/17030).
+- Latest Posts Block: [(no title) instead of (Untitled) for a post without a title](https://github.com/WordPress/gutenberg/pull/17074).
+- [Remove borders around inserter items for blocks with children blocks](https://github.com/WordPress/gutenberg/pull/17083).
+- Add [disabled block count](https://github.com/WordPress/gutenberg/pull/17103) in the block manager.
+- Writing Flow:
+ - Add [splitting in the quote block](https://github.com/WordPress/gutenberg/pull/17121).
+ - Allow [undoing of patterns with BACKSPACE and ESC.](https://github.com/WordPress/gutenberg/pull/14776)
+
+### Experiments
+- Widgets Screen:
+ - Fix: [Blocks are too close together](https://github.com/WordPress/gutenberg/issues/16992).
+ - Add [Button block appender](https://github.com/WordPress/gutenberg/pull/16971).
+
+### New APIs
+- Add [callbacks to ServerSideRenderer](https://github.com/WordPress/gutenberg/pull/16512) to handle failures with custom renderers.
+- Add the [block example API](https://github.com/WordPress/gutenberg/pull/17124) and use it for inserter and switcher previews.
+- Enable an [optional namespace parameter for hasAction & hasFilter ](https://github.com/WordPress/gutenberg/pull/15362).
+
+
+### Bug Fixes
+- The [duplicate button appears even if the block is not allowed](https://github.com/WordPress/gutenberg/pull/17007).
+- [Double scrollbar appearing](https://github.com/WordPress/gutenberg/pull/17031) in full-screen mode.
+- RichText: [ignore selection changes during composition](https://github.com/WordPress/gutenberg/pull/16960)
+- Missing [default functions as props in BlockEditorProvider](https://github.com/WordPress/gutenberg/pull/17036).
+- [Button block does not center](https://github.com/WordPress/gutenberg/pull/17063) on the editor.
+- Guard [block component against zombie state](https://github.com/WordPress/gutenberg/pull/17092) bug.
+- Add [truthy check for the Popover component](https://github.com/WordPress/gutenberg/pull/17100) onClose prop before calling it.
+- Make InnerBlocks [only force the template on directly set lockings](https://github.com/WordPress/gutenberg/pull/16973).
+- Check to [ensure focus has intentionally left the wrapped component in withFocusOutside](https://github.com/WordPress/gutenberg/pull/17051) HOC.
+- Correctly [transform images with external sources](https://github.com/WordPress/gutenberg/pull/16548) into a gallery.
+- [Block toolbar appears above sidebar](https://github.com/WordPress/gutenberg/pull/17108) on medium viewports.
+- [Basecontrol name undefined](https://github.com/WordPress/gutenberg/pull/17044/files) triggring eslint-plugin TypeError.
+- [Image flickering & focus lose](https://github.com/WordPress/gutenberg/pull/17175) on resizing.
+- Add [get_item_schema function to WP_REST_Widget_Areas_Controller ](https://github.com/WordPress/gutenberg/pull/15981).
+- [Empty Classic Editor inside innerBlock fatal error](https://github.com/WordPress/gutenberg/pull/17164).
+- [Changing month in post publish date closes the popover](https://github.com/WordPress/gutenberg/pull/17164).
+
+### Various
+
+- Update [re-resizable dependency](https://github.com/WordPress/gutenberg/pull/17011)
+- Use [mixins in button styles instead of media queries.](https://github.com/WordPress/gutenberg/pull/17012)
+- [Fix performance tests with the introduction of the navigation mode](https://github.com/WordPress/gutenberg/pull/17034)
+- RichText code improvements: [#16905](https://github.com/WordPress/gutenberg/pull/16905), [#16962](https://github.com/WordPress/gutenberg/pull/16962).
+- Scripts:
+ - Improve the way [test files are discovered](https://github.com/WordPress/gutenberg/pull/17033).
+ - Improve [recommended settings](https://github.com/WordPress/gutenberg/pull/17027) included in the package.
+ - Use [the SCSS shared stylelint-config-wordpress config](https://github.com/WordPress/gutenberg/pull/17060).
+- [Ignore the WordPress directory](https://github.com/WordPress/gutenberg/pull/16243) in stylelint.
+- Fix: [edit post sets some default block appender styles](https://github.com/WordPress/gutenberg/pull/16943).
+- Build: [remove global install of latest npm](https://github.com/WordPress/gutenberg/pull/17134).
+- Project automation:
+ - Rewrite [actions using JavaScript](https://github.com/WordPress/gutenberg/pull/17080).
+ - Fix: [Add first-time contributor label](https://github.com/WordPress/gutenberg/pull/17156).
+ - Fix: [Add milestone](https://github.com/WordPress/gutenberg/pull/17157).
+- Remove [unused CSS from ColorPalette](https://github.com/WordPress/gutenberg/pull/17152) component.
+
+
+### Documentation
+- Add [examples for the lockPostSaving and unlockPostSaving](https://github.com/WordPress/gutenberg/pull/16713)actions.
+- Add guidance for [adding/proposing/suggesting new components](https://github.com/WordPress/gutenberg/pull/16845) to the wordpress/components npm package.
+- Add section about [updating package after new releases](https://github.com/WordPress/gutenberg/pull/17026).
+- Add [ESNext examples to format API](https://github.com/WordPress/gutenberg/pull/16804) tutorial.
+- Document [server-side functions that allow registering block styles](https://github.com/WordPress/gutenberg/pull/16997).
+
+
+### Mobile
+- [Reset toolbar scroll on content change](https://github.com/WordPress/gutenberg/pull/16945).
+- [Extract caption component](https://github.com/WordPress/gutenberg/pull/16825).
+- [Not use ListEdit](https://github.com/WordPress/gutenberg/pull/17070).
+- [Hide replaceable blocks when adding blocks](https://github.com/WordPress/gutenberg/pull/16931).
+- Make [tapping at the end of post always insert at the end of the post.](https://github.com/WordPress/gutenberg/pull/16934)
+= 6.3.0 =
+
+### Features
+
+- A11y: Support [Navigation and Edit modes](https://github.com/WordPress/gutenberg/pull/16500) to ease navigating between blocks.
+- [Support text alignments](https://github.com/WordPress/gutenberg/pull/16111) in Table block columns.
+- Support changing the [separator block color](https://github.com/WordPress/gutenberg/pull/16784).
+
+### Enhancements
+
+- Improvements to the BlockPreview component:
+ - Support [previewing a multiple blocks](https://github.com/WordPress/gutenberg/pull/16033) (a template).
+ - [Unify BlockPreview and BlockPreviewContent](https://github.com/WordPress/gutenberg/pull/16801) into a unique component.
+ - Hide [block appenders](https://github.com/WordPress/gutenberg/pull/16887).
+ - [Expose the component](https://github.com/WordPress/gutenberg/pull/16834) in the block-editor module.
+ - [Scale the preview content](https://github.com/WordPress/gutenberg/pull/16873) according to the width of the preview container.
+- Improvements to the Modal component design:
+ - Increase the [padding of the Modal component](https://github.com/WordPress/gutenberg/pull/16690).
+ - Correct the [position of the close button](https://github.com/WordPress/gutenberg/pull/16883).
+- Use classnames instead of inline styles for text alignments in:
+ - [Verse block](https://github.com/WordPress/gutenberg/pull/16777).
+ - [Quote block](https://github.com/WordPress/gutenberg/pull/16779).
+ - [Paragraph block](https://github.com/WordPress/gutenberg/pull/16794).
+- Add a [purple color option](https://github.com/WordPress/gutenberg/pull/16833) to the default color palette.
+- A11y: Visible [focus and active styles for Windows high contrast mode](https://github.com/WordPress/gutenberg/pull/16554).
+- Improve the design of the [inline image controls](https://github.com/WordPress/gutenberg/pull/16793) in the Gallery block.
+- I18n: Align the [Read more string](https://github.com/WordPress/gutenberg/pull/16865) with WordPress Core.
+- Removes the word-break :break-all CSS rule from the [table cells](https://github.com/WordPress/gutenberg/pull/16741).
+- Update the [Notice dismiss button](https://github.com/WordPress/gutenberg/pull/16926) to match other Gutenberg UI (color and icon).
+- Modifies the shortcut hierarchy in the [keyboard shortcuts modal](https://github.com/WordPress/gutenberg/pull/16724).
+- Remove [edit gallery toolbar button](https://github.com/WordPress/gutenberg/pull/16778).
+- Add the possibility to [disable document settings panels registered by plugins](https://github.com/WordPress/gutenberg/pull/16900).
+- [ESLint plugin: Enable `wp` global by default](https://github.com/WordPress/gutenberg/pull/16904) in the `recommended` config.
+
+### Experiments
+
+- Add a settings page to the plugin to [enable/disable experimental features](https://github.com/WordPress/gutenberg/pull/16626).
+- Add [padding when interacting with](https://github.com/WordPress/gutenberg/pull/14961) [nested blocks](https://github.com/WordPress/gutenberg/pull/16820) to ease parent block selections.
+- Widgets Screen:
+ - Prevent the [block toolbar from overlapping](https://github.com/WordPress/gutenberg/pull/16765) the widget area header.
+ - Add the [BlockEditorKeyboardShortcuts](https://github.com/WordPress/gutenberg/pull/16972) component.
+ - Fixed [block paddings](https://github.com/WordPress/gutenberg/pull/16944).
+
+### New APIs
+
+- Support [Entities](https://github.com/WordPress/gutenberg/pull/16823) [Local Edits](https://github.com/WordPress/gutenberg/pull/16867) in the Core Data Module.
+- Support [autosaving entities](https://github.com/WordPress/gutenberg/pull/16903) in the Core Data Module.
+- Add support for [disabled dropdown items](https://github.com/WordPress/gutenberg/pull/15976) in SelectControl.
+- Add [onFocusOutside](https://github.com/WordPress/gutenberg/pull/14851) prop as a replacement to Popover onClickOutside.
+- [Stop using unstable props on DropdownMenu.](https://github.com/WordPress/gutenberg/pull/15968)
+
+### Bug Fixes
+
+- [Prevent tooltips from appearing](https://github.com/WordPress/gutenberg/pull/16800) on mouse down.
+- Avoid passing event object to [save button onSave prop](https://github.com/WordPress/gutenberg/pull/16770).
+- Prevent [image captions loss](https://github.com/WordPress/gutenberg/pull/15004) when editing a Gallery block.
+- Rerender [FormtTokenField](https://github.com/WordPress/gutenberg/pull/14819) component when the suggestions prop changes.
+- Handle scalar [return types values in useSelect](https://github.com/WordPress/gutenberg/pull/16669).
+- Fix [php notice](https://github.com/WordPress/gutenberg/pull/16189) that can be triggered while using the Search block.
+- Fix the [Resolve Block Modal](https://github.com/WordPress/gutenberg/pull/15581) columns sizes.
+- Fix [duplicate content when pasting](https://github.com/WordPress/gutenberg/pull/16857) text into newly focused RichText.
+- Fix [Table block cell selection](https://github.com/WordPress/gutenberg/pull/16653) when clicking on the edge of the cells.
+- Prevent the [CSS reset](https://github.com/WordPress/gutenberg/pull/16856) from applying to the meta boxes.
+- Fix [misaligned Block toolbars](https://github.com/WordPress/gutenberg/pull/16858) on floated blocks.
+- Fix the [Notice component](https://github.com/WordPress/gutenberg/pull/16861) close button alignment and [height](https://github.com/WordPress/gutenberg/pull/16891).
+- [Link to the full size images](https://github.com/WordPress/gutenberg/pull/16011) in the Gallery block.
+- Avoid leaking CSS transforms when [disabling block animations](https://github.com/WordPress/gutenberg/pull/16893).
+- A11y: Avoid focusing the PostTitle component when [switching between code and visual editor](https://github.com/WordPress/gutenberg/pull/16874).
+- A11y: Add a [confirmation step to enable the Custom Fields](https://github.com/WordPress/gutenberg/pull/15688) [option](https://github.com/WordPress/gutenberg/pull/16918).
+- [Disable block insertion buttons](https://github.com/WordPress/gutenberg/pull/15024) and [prevent moving blocks](https://github.com/WordPress/gutenberg/pull/14924) depending on the contextual restrictions (template locking and default block availability).
+- Fix [Block manager not honoring the allowed_block_types](https://github.com/WordPress/gutenberg/pull/16586) hook.
+- [Keep the Image block alt and caption attributes](https://github.com/WordPress/gutenberg/pull/16051) while uploading a new image.
+- Don't render [drop zone below the default block appender](https://github.com/WordPress/gutenberg/pull/16119).
+- Prevent horizontal [arrow navigation errors](https://github.com/WordPress/gutenberg/pull/16846).
+- Fix [shifting menu items on DropdownMenu](https://github.com/WordPress/gutenberg/pull/16871).
+- Make API Fetch [refresh nonces as soon as they expired](https://github.com/WordPress/gutenberg/pull/16683).
+
+### Various
+- Github actions:
+ - [Automatically assign issues](https://github.com/WordPress/gutenberg/pull/16700) to PR authors.
+ - Automatically assign the [First-time Contributor label](https://github.com/WordPress/gutenberg/pull/16762).
+- Avoid [unguarded getRangeAt usage](https://github.com/WordPress/gutenberg/pull/16212) and add eslint rule.
+- Make the [e2e transforms tests](https://github.com/WordPress/gutenberg/pull/16739) more stable.
+- [ESLint no-unused-vars-before-return rule](https://github.com/WordPress/gutenberg/pull/16799): Exempt destructuring only if to multiple properties.
+- Output an [informational message for deprecations](https://github.com/WordPress/gutenberg/pull/16774) when no version provided.
+- Refactor [registry selectors](https://github.com/WordPress/gutenberg/pull/16692) to allow calling them from other regular selectors.
+- Bail early in the [deactivatePlugin e2e test utility](https://github.com/WordPress/gutenberg/pull/16816) if plugin is already inactive.
+- Fix the [CheckboxControl](https://github.com/WordPress/gutenberg/pull/16551) [styles](https://github.com/WordPress/gutenberg/pull/16863) in a WordPress agnostic context.
+- Move the [auto-draft status and default title handling](https://github.com/WordPress/gutenberg/pull/16814) to the server.
+- Code quality tweaks to the [Table block e2e tests](https://github.com/WordPress/gutenberg/pull/16872).
+- [Fix JSDocs errors](https://github.com/WordPress/gutenberg/pull/16870) across the entire repository.
+- [Upgrade Lerna](https://github.com/WordPress/gutenberg/pull/16919) to the latest version (3.16.4).
+- [Upgrade](https://github.com/WordPress/gutenberg/pull/16875) [Puppeteer](https://github.com/WordPress/gutenberg/pull/16937) to the latest version (1.19.0).
+- [Upgrade ESLint](https://github.com/WordPress/gutenberg/pull/16921) to the latest version (6.1.0).
+- Run [npm audit fix](https://github.com/WordPress/gutenberg/pull/16963) to fix dependency vulnerabilities.
+- Audit and fix all [missing or obsolete package dependencies](https://github.com/WordPress/gutenberg/pull/16969).
+- Fix issue with [jest caching of block.json](https://github.com/WordPress/gutenberg/pull/16899) files.
+- Add [eslint-plugin-jsdoc lint rule](https://github.com/WordPress/gutenberg/pull/16869) for better JSDoc linting.
+- Fix [intermittent RichText e2e test failures](https://github.com/WordPress/gutenberg/pull/16952).
+- [Replace the react-click-outside dependency usage](https://github.com/WordPress/gutenberg/pull/16878) with our own Higher-order component withFocusOutside.
+- Improve the [usage of eslint-disable directives](https://github.com/WordPress/gutenberg/pull/16941).
+- Migrate the [Github Actions](https://github.com/WordPress/gutenberg/pull/16981) to the new YAML syntax.
+
+### Documentation
+
+- Enhance the components Design Documentation and guidelines:
+ - [DateTime](https://github.com/WordPress/gutenberg/pull/16757) component.
+ - [Spinner](https://github.com/WordPress/gutenberg/pull/16760) component.
+ - [ClipboardButton](https://github.com/WordPress/gutenberg/pull/16758) component.
+- Add section about adding [new dependencies to WordPress](https://github.com/WordPress/gutenberg/pull/16876) [packages](https://github.com/WordPress/gutenberg/pull/16923).
+- Add [Figma ressources](https://github.com/WordPress/gutenberg/pull/16892) to the Design documentation.
+- Document [URL inputs reusable components](https://github.com/WordPress/gutenberg/pull/16566).
+- Typos and tweaks: [1](https://github.com/WordPress/gutenberg/pull/16852), [2](https://github.com/WordPress/gutenberg/pull/16832), [3](https://github.com/WordPress/gutenberg/pull/16908).
+
+### Mobile
+
+- Refactor [BlockToolbar out of](https://github.com/WordPress/gutenberg/pull/16677) [BlockList](https://github.com/WordPress/gutenberg/pull/16906).
+- Fix [toolbar bottom inset for iPhone X](https://github.com/WordPress/gutenberg/pull/16961) devices.
+
+= 6.2.0 =
+
+### Enhancements
+- Introduce [Link Target](https://github.com/WordPress/gutenberg/pull/10128) [support](https://github.com/WordPress/gutenberg/pull/16497) in Button block.
+- Limit the [maximum height of the HTML block](https://github.com/WordPress/gutenberg/pull/16187).
+- Show the [preview button on mobile viewports](http://update/show-post-preview-button-on-mobile).
+- [Remove nested block restrictions](https://github.com/WordPress/gutenberg/pull/16751) from the Cover and Media & Text blocks.
+- A11y: Improving and standardize the [block styles focus and active states](https://github.com/WordPress/gutenberg/pull/16545).
+- Always [collapse block alignment toolbars](https://github.com/WordPress/gutenberg/pull/16557).
+
+### Bug Fixes
+- Fix using the [Classic block in nested contexts](https://github.com/WordPress/gutenberg/pull/16477).
+- Fix [lost nested blocks](https://github.com/WordPress/gutenberg/pull/14443) if the container block is missing.
+- Fix [pasting content into nested blocks](https://github.com/WordPress/gutenberg/pull/16717).
+- Fix [race condition in the block moving animation](https://github.com/WordPress/gutenberg/pull/16750) causing blocks to overlap.
+- A11y: Make the [Table block accessible](https://github.com/WordPress/gutenberg/pull/16324) at high zoom levels.
+- A11y: Change the [font size picker markup](https://github.com/WordPress/gutenberg/pull/16148) to use select.
+- A11y: Match the [primary button disabled](https://github.com/WordPress/gutenberg/pull/16103) [state](https://github.com/WordPress/gutenberg/pull/16769) to Core's color contrast.
+- Fix the [z-index of the block toolbars](https://github.com/WordPress/gutenberg/pull/16530) for blocks following wide aligned blocks.
+- [Hide the columns count control](https://github.com/WordPress/gutenberg/pull/16476) when the columns block placeholder is shown.
+- [Prevent the block movers from disappearing](https://github.com/WordPress/gutenberg/pull/16579) on middle breakpoints for full/wide blocks.
+- [Slimmer top/bottom spacing inside notices](https://github.com/WordPress/gutenberg/pull/16589) shown outside the editor canvas.
+- Fix [converting video shortcode into video blocks](https://github.com/WordPress/gutenberg/pull/16588) when file type sources are used.
+- [Localize the read more link](https://github.com/WordPress/gutenberg/pull/16665) in the latest posts block.
+- Fix issue with [inconsistent nesting appender](https://github.com/WordPress/gutenberg/pull/16453).
+- Fix styling of [IconButton used in ButtonGroup](https://github.com/WordPress/gutenberg/pull/16686) components.
+- [Remove Change Permalinks button](https://github.com/WordPress/gutenberg/pull/16395) when permalink is not editable.
+- Fix [aspect ratio typo and recalculate padding](https://github.com/WordPress/gutenberg/pull/16573) in embed block.
+- Ensure [hour/minute fields are always shown left to right](https://github.com/WordPress/gutenberg/pull/16375) in RTL languages.
+- Refactor the empty line padding in the RichText component. This fixes [padding issues in the list block in Firefox](https://github.com/WordPress/gutenberg/pull/14846).
+- Improve the stability of the [RichText placeholder](https://github.com/WordPress/gutenberg/pull/16733).
+- Add [custom placeholder support](https://github.com/WordPress/gutenberg/pull/16783) for the button block.
+- Show the [image size labels on the block-based widget screen](https://github.com/WordPress/gutenberg/pull/16763).
+
+### Documentation
+- Clarify the [block title and description conventions](https://github.com/WordPress/gutenberg/pull/16458).
+- Add [RichText component documentation](https://github.com/WordPress/gutenberg/pull/15956) to the Block Editor Handbook.
+- Improve the [repository triage docs](https://github.com/WordPress/gutenberg/pull/16234).
+- Adds documentation for the [PluginDocumentSettingPanel SlotFill](https://github.com/WordPress/gutenberg/pull/16620).
+- Tweaks and typos: [1](https://github.com/WordPress/gutenberg/pull/16438), [2](https://github.com/WordPress/gutenberg/pull/16455), [3](https://github.com/WordPress/gutenberg/pull/16468), [4](https://github.com/WordPress/gutenberg/pull/16456), [5](https://github.com/WordPress/gutenberg/pull/16470), [6](https://github.com/WordPress/gutenberg/pull/16469), [7](https://github.com/WordPress/gutenberg/pull/16526), [8](https://github.com/WordPress/gutenberg/pull/16531), [9](https://github.com/WordPress/gutenberg/pull/16528), [10](https://github.com/WordPress/gutenberg/pull/16610), [11](https://github.com/WordPress/gutenberg/pull/16450), [12](https://github.com/WordPress/gutenberg/pull/16756) , [13](https://github.com/WordPress/gutenberg/pull/16693), [14](https://github.com/WordPress/gutenberg/pull/16787).
+
+### Divers
+- Add a [simple API to register block style variations](https://github.com/WordPress/gutenberg/pull/16356) on the server.
+- Allow alternative blocks to be used to handle [Grouping interactions](https://github.com/WordPress/gutenberg/pull/16278).
+- Fix Travis instability by [waiting for MySQL availability](https://github.com/WordPress/gutenberg/pull/16461) before install the plugin.
+- Continue the [generic RichText component](https://github.com/WordPress/gutenberg/pull/16309) refactoring.
+- Remove the [usage of the editor store](https://github.com/WordPress/gutenberg/pull/16184) from the block editor module.
+- Update the [MilestoneIt Github action](https://github.com/WordPress/gutenberg/pull/16511) to read the plugin version from master.
+- Refactor the post meta block attributes to use a generic [custom sources mechanism](https://github.com/WordPress/gutenberg/pull/16402).
+- Expose [position prop in DotTip](https://github.com/WordPress/gutenberg/pull/14972) component.
+- Avoid docker [containers automatic restart](https://github.com/WordPress/gutenberg/pull/16547).
+- Bump [Lodash dependencies to 4.17.14](https://github.com/WordPress/gutenberg/pull/16567).
+- Fix the [build command on Windows](https://github.com/WordPress/gutenberg/pull/16029) environments.
+- Add allowedFormats and withoutInteractiveFormats props to the RichText component to [control the available formats per RichText](https://github.com/WordPress/gutenberg/pull/14542).
+- Remove [inappropriate executable permissions](https://github.com/WordPress/gutenberg/pull/16687) from core-data package files.
+- ESLint Plugin: [Exempt React hooks from no-unused-vars-before-return](https://github.com/WordPress/gutenberg/pull/16737).
+- Use React [Portal based slots for the block toolbar](https://github.com/WordPress/gutenberg/pull/16421).
+- Use [combineReducers utility from the data module](https://github.com/WordPress/gutenberg/pull/16752) instead of redux.
+- Support [hideLabelFromVision prop](https://github.com/WordPress/gutenberg/pull/16701) in all control components.
+- Adds missing [babel-jest and core-js](https://github.com/WordPress/gutenberg/pull/16259) dependencies to the scripts package.
+
+### Mobile
+- [Tapping on an empty editor](https://github.com/WordPress/gutenberg/pull/16439) area creates a new paragraph block.
+- [Fix video uploads](https://github.com/WordPress/gutenberg/pull/16331) when the connection is lost and restored.
+- Track [unsupported block list](https://github.com/WordPress/gutenberg/pull/16434).
+- Insert [new block below the post title](https://github.com/WordPress/gutenberg/pull/16440) if the post title is selected.
+- Run the [mobile tests in the Gutenberg CI](https://github.com/WordPress/gutenberg/pull/16404) server.
+- Replace use of [deprecated componentWillReceiveProps](https://github.com/WordPress/gutenberg/pull/16577) in ImageEdit.
+- Show placeholder when [adding block from the post title](https://github.com/WordPress/gutenberg/pull/16539).
+- [Blur post title](https://github.com/WordPress/gutenberg/pull/16642) any time another block is selected.
+- Inserting block from the post title [replaces empty blocks](https://github.com/WordPress/gutenberg/pull/16574).
+- [Update Video caption placeholder color](https://github.com/WordPress/gutenberg/pull/16716) to match other placeholder text styles.
+- Move the [post title selection state](https://github.com/WordPress/gutenberg/pull/16704) to the store.
+
+
+= 6.1.1 =
+
+### Bug Fixes
+
+- Prevent automatic conversion of widgets to blocks when using the customizer.
+- Fix missing block properties on block registration filters used for the deprecated versions.
+
+= 6.1.0 =
+
+### Enhancements
+
+* [Introduce motion](https://github.com/WordPress/gutenberg/pull/16065)/animation when reordering/adding/removing blocks.
+* Improve the [Image block link settings](https://github.com/WordPress/gutenberg/pull/15570) and move it to the block toolbar.
+* Use a snackbar notice when clicking “[Copy all content](https://github.com/WordPress/gutenberg/pull/16265)”.
+* Show [REST API error messages](https://github.com/WordPress/gutenberg/pull/15657) as notices.
+* Clarify the wording of the view link in the [Permalink panel](https://github.com/WordPress/gutenberg/pull/16041).
+* [Hide the “Copy all content”](https://github.com/WordPress/gutenberg/pull/16286) button if the post is empty.
+* [Hide the ungroup action](https://github.com/WordPress/gutenberg/pull/16332) when there are no inner blocks.
+* Use admin schemes dependent [focus state for primary buttons](https://github.com/WordPress/gutenberg/pull/16275).
+* Add support for the [table cells scope attribute](https://github.com/WordPress/gutenberg/pull/16154) when pasting.
+
+### Experiments
+
+* Introduce a new [Customizer Panel](https://github.com/WordPress/gutenberg/pull/16204) to edit block-based widget areas.
+* Add the [block inspector](https://github.com/WordPress/gutenberg/pull/16203) to the widgets screen.
+* Add a [global inserter](http://add/inserter-widget-areas) to the widgets screen.
+
+### Bug Fixes
+
+* Show the [pre-publish panel for contributors](https://github.com/WordPress/gutenberg/pull/16424).
+* Fix the [save in progress state](https://github.com/WordPress/gutenberg/pull/16303) of the Publish/Update Button.
+* Fix [adding/removing columns from the table block](https://github.com/WordPress/gutenberg/pull/16410) when using header/footer sections.
+* Fix Image block not [preserving custom dimensions](https://github.com/WordPress/gutenberg/pull/16125) when opening the media library.
+* [Resize Image blocks](https://github.com/WordPress/gutenberg/pull/16398) properly when changing the width from the inspector.
+* Fix php error that can potentially be triggered by [gutenberg_is_block_editor](https://github.com/WordPress/gutenberg/pull/16201).
+* Fix error when using the [“tag” block attribute source type](https://github.com/WordPress/gutenberg/pull/16290).
+* Fix [chrome rendering bug](https://github.com/WordPress/gutenberg/pull/16325) happening when resizing images.
+* Fix the [data-block style selector](https://github.com/WordPress/gutenberg/pull/16207) to avoid affecting third-party components.
+* Allow the [columns layout options](https://github.com/WordPress/gutenberg/pull/16371) to wrap on small screens.
+* Fix [isShallowEqual](https://github.com/WordPress/gutenberg/pull/16329) edge case when the second argument is undefined.
+* Prevent the [disabled block switcher icon](https://github.com/WordPress/gutenberg/pull/16390) from becoming unreadable.
+* Fix [Group Block deprecation](https://github.com/WordPress/gutenberg/pull/16348) and any deprecation relying on hooks.
+* A11y:
+ * Make the [top toolbar wrap](https://github.com/WordPress/gutenberg/pull/16250) at high zoom levels.
+ * Fix the [sticky notices](https://github.com/WordPress/gutenberg/pull/16255) at high zoom levels.
+
+### Performance
+
+* Improve the performance of the [i18n Tannin library](https://github.com/WordPress/gutenberg/pull/16337).
+* Track the [block parent](https://github.com/WordPress/gutenberg/pull/16392) in the state to optimize hierarchy selectors.
+* Add a [cache key](https://github.com/WordPress/gutenberg/pull/16407) tracked in state to optimize the getBlock selector.
+
+### Documentation
+
+* Document the [plugin release tool](https://github.com/WordPress/gutenberg/pull/16366).
+* Document the use-cases of the [dynamic blocks](https://github.com/WordPress/gutenberg/pull/16228).
+* Tweaks and typos: [1](https://github.com/WordPress/gutenberg/pull/16267), [2](https://github.com/WordPress/gutenberg/pull/16153), [3](https://github.com/WordPress/gutenberg/pull/16170), [4](https://github.com/WordPress/gutenberg/pull/16312), [5](https://github.com/WordPress/gutenberg/pull/16320), [6](https://github.com/WordPress/gutenberg/pull/16138).
+
+### Various
+
+* Introduce a [PluginDocumentSettingPanel](https://github.com/WordPress/gutenberg/pull/13361) slot to allow third-party plugins to add panels to the document sidebar tab.
+* [Deploy the playground](https://github.com/WordPress/gutenberg/pull/16345) automatically to Github Pages. [https://wordpress.github.io/gutenberg/](https://wordpress.github.io/gutenberg/)
+* Extract a [generic RichText](http://try/move-rich-text) [component](https://github.com/WordPress/gutenberg/pull/16299) to the @wordpress/rich-text package.
+* Refactor the [editor initialization](https://github.com/WordPress/gutenberg/pull/15444) to rely on a component.
+* Remove unused internal [asType utility](https://github.com/WordPress/gutenberg/pull/16291).
+* Fix [react-no-unsafe-timeout ESlint rule](https://github.com/WordPress/gutenberg/pull/16292) when using variable assignment.
+* Add support for [watching block.json files](https://github.com/WordPress/gutenberg/pull/16150) when running “npm run dev”.
+* Remove: experimental status from [blockEditor.transformStyles](https://github.com/WordPress/gutenberg/pull/16126).
+* Upgrade [PHPCS composer dependencies](https://github.com/WordPress/gutenberg/pull/16387) and use [strict comparisons](https://github.com/WordPress/gutenberg/pull/16381) to align with the PHPCS guidelines.
+* Fix a small console warning when running [performance tests](https://github.com/WordPress/gutenberg/pull/16409).
+
+### Mobile
+
+* Correct the position of the [block insertion indicator](https://github.com/WordPress/gutenberg/pull/16272).
+* Unify [Editor and Layout](https://github.com/WordPress/gutenberg/pull/16260) components with the web component hierarchy.
+
+
+= 6.0.0 =
+
+### Features
+
+* Support choosing a [pre-defined layout for the Columns block](https://github.com/WordPress/gutenberg/pull/16129).
+
+### Enhancements
+
+* Add [Snackbar notices](https://github.com/WordPress/gutenberg/pull/16020) support to the widgets screen.
+* Add an [inner container to the Group](https://github.com/WordPress/gutenberg/pull/15210) [block](https://github.com/WordPress/gutenberg/pull/16202) to simplify theme styling.
+* Avoid stacking successive [MediaPlaceholder errors](https://github.com/WordPress/gutenberg/pull/14721).
+* Adjust the [DatePicker margins](https://github.com/WordPress/gutenberg/pull/16097).
+* Update the [Tag Cloud block](https://github.com/WordPress/gutenberg/pull/16098) [copy](https://github.com/WordPress/gutenberg/pull/16107) when no terms are found.
+* Add descriptive text and a link to [documentation in embed blocks](https://github.com/WordPress/gutenberg/pull/16101).
+* Improve placeholder text [phrasing for media blocks](https://github.com/WordPress/gutenberg/pull/16135).
+* Use classnames for the [text alignments in the heading block](https://github.com/WordPress/gutenberg/pull/16035).
+* Make the [inserter category icons grayscale](https://github.com/WordPress/gutenberg/pull/16163).
+* A11y: Make the [modal overlay scrim darker](https://github.com/WordPress/gutenberg/pull/15974).
+
+### Bug Fixes
+
+* Fix [warning messages triggered by the Group block](https://github.com/WordPress/gutenberg/pull/16096) icons.
+* Fix [horizontal scrollbar on full-wide blocks](https://github.com/WordPress/gutenberg/pull/16085) with nesting.
+* A11y:
+ * Re-enable the [menu item hover state](https://github.com/WordPress/gutenberg/pull/16168) on small screens.
+ * Correct text zoom issue in the [Content Structure popover](https://github.com/WordPress/gutenberg/pull/15984).
+* Fix the [Popovers position](https://github.com/WordPress/gutenberg/pull/15949) in the widgets screen.
+* Fix the behavior of the [block toolbars in the widgets screen](https://github.com/WordPress/gutenberg/pull/15470).
+* Fix the editor in IE11 (use the [CJS version of react-spring](https://github.com/WordPress/gutenberg/pull/16196)).
+* Fix formatting of the [validation error messages](https://github.com/WordPress/gutenberg/pull/16173) in the console.
+* Fix breakage when the [CPT doesn’t support title](https://github.com/WordPress/gutenberg/pull/16236).
+
+### Various
+
+* Document and simplify the [multi-entrypoints support](https://github.com/WordPress/gutenberg/pull/15982) in the @wordpress/scripts package.
+* Create sub-registry automatically when using [EditorProvider](https://github.com/WordPress/gutenberg/pull/15989).
+* Use classnames utility instead of concatenating [classnames in the TabPanel](https://github.com/WordPress/gutenberg/pull/16081) component.
+* Remove the default value for the [required onRequestClose prop](https://github.com/WordPress/gutenberg/pull/16074) in the Modal component.
+* Remove the [editor package dependency](https://github.com/WordPress/gutenberg/pull/15548) from the media blocks.
+* Fix the [playground build](https://github.com/WordPress/gutenberg/pull/15947) script.
+* Fix the [Github action assigning milestones](https://github.com/WordPress/gutenberg/pull/16084).
+* Fix [naming conventions](https://github.com/WordPress/gutenberg/pull/16091) for function containing CLI keyword.
+* Fix the [Travis build artifacts job](http://update/build-artifacts-npm-install) to use a full npm install while building.
+* Make [Calendar block resilient](https://github.com/WordPress/gutenberg/pull/16161) to the editor module not being present.
+* Ensure the Snackbar component is only used with a [single action button](https://github.com/WordPress/gutenberg/pull/16095).
+* Remove [SlotFillProvider and DropZoneProvider](https://github.com/WordPress/gutenberg/pull/15988) from the BlockEditorProvider.
+* Add the initial version of the [Block Registration RFC](https://github.com/WordPress/gutenberg/pull/13693).
+* Add [popoverProps prop to the Dropdown](https://github.com/WordPress/gutenberg/pull/14867) component.
+* Update [Image Block's image classes](https://github.com/WordPress/gutenberg/pull/15464) with dimensions.
+* Support registering [custom grouping blocks](https://github.com/WordPress/gutenberg/pull/15774).
+* Fix h1 heading typo so [h1 is same size as title](https://github.com/WordPress/gutenberg/pull/16253).
+* Remove the [custom class support from the legacy widget](https://github.com/WordPress/gutenberg/pull/16231) block.
+
+### Documentation
+
+* Prefer [register\_post\_meta](https://github.com/WordPress/gutenberg/pull/16032) over register\_meta.
+* Add [mention of Figma](https://github.com/WordPress/gutenberg/pull/16140) to the design contributing docs.
+* Add [supported attribute types](https://github.com/WordPress/gutenberg/pull/16220) for the Blocks API.
+* Enhance the [Annotations API](https://github.com/WordPress/gutenberg/pull/16233) documentation.
+* Tweaks and typos: [1](https://github.com/WordPress/gutenberg/pull/16083), [2](https://github.com/WordPress/gutenberg/pull/16073), [3](https://github.com/WordPress/gutenberg/pull/16087), [4](https://github.com/WordPress/gutenberg/pull/16102), [5](https://github.com/WordPress/gutenberg/pull/16145), [6](https://github.com/WordPress/gutenberg/pull/16143), [7](https://github.com/WordPress/gutenberg/pull/16144), [8](https://github.com/WordPress/gutenberg/pull/16232), [9](https://github.com/WordPress/gutenberg/pull/16121), [10](https://github.com/WordPress/gutenberg/pull/16235), [11](https://github.com/WordPress/gutenberg/pull/15394).
+
+### Mobile
+
+* Fix [multiline Image block captions](https://github.com/WordPress/gutenberg/pull/16071) in iOS.
+* Avoid unnecessary [div elements in the content of Quote](https://github.com/WordPress/gutenberg/pull/16072) blocks.
+* Update the default [colors used in the RichText](https://github.com/WordPress/gutenberg/pull/16016) component.
+* Fix [pasting text on Post Title](https://github.com/WordPress/gutenberg/pull/16116).
+* Unify the web and mobile components hierarchy:
+ * [BlockPicker and Inserter](https://github.com/WordPress/gutenberg/pull/16114).
+ * [BlockToolbar](https://github.com/WordPress/gutenberg/pull/16213).
+ * [BlockMobileToolbar](https://github.com/WordPress/gutenberg/pull/16177).
+ * [BlockListBlock](https://github.com/WordPress/gutenberg/pull/16223).
+ * [BlockList](https://github.com/WordPress/gutenberg/pull/16239).
+* Add native component [HTMLTextInput](https://github.com/WordPress/gutenberg/pull/16226).
+* Update the video player to [open the URL by browser](https://github.com/WordPress/gutenberg/pull/16089) on Android.
+* Re-enable the [Video block on Android](https://github.com/WordPress/gutenberg/pull/16215).
+
+= 5.9.2 =
+
+### Bug Fixes
+
+ - Fix Regression for blocks using InnerBlocks.Content from the editor package (support forwardRef components in the block serializer).
+
+= 5.9.1 =
+
+### Bug Fixes
+
+* Fix the issue where [statics for deprecated components were not hoisted](https://github.com/WordPress/gutenberg/pull/16152)
+
+= 5.9.0 =
+
+### Features
+
+* Allow [grouping/ungrouping blocks](https://github.com/WordPress/gutenberg/pull/14908) using the Group block.
+
+### Enhancements
+
+* Improve the selection of inner blocks: [Clickthrough selection](https://github.com/WordPress/gutenberg/pull/15537).
+* Introduce the [snackbar notices](https://github.com/WordPress/gutenberg/pull/15594) and use them for the save success notices.
+* Use [consistent colors in the different menus](https://github.com/WordPress/gutenberg/pull/15531) items.
+* [Consolidate the different dropdown menus](https://github.com/WordPress/gutenberg/pull/14843) to use the DropdownMenu component.
+* Expand the [**prefered-reduced-motion** support](https://github.com/WordPress/gutenberg/pull/15850) to all the animations.
+* Add a subtle [animation to the snackbar](https://github.com/WordPress/gutenberg/pull/15908) notices and provide new React hooks for media queries.
+* Redesign the [Table block placeholder](https://github.com/WordPress/gutenberg/pull/15903).
+* [Always show the side inserter](https://github.com/WordPress/gutenberg/pull/15864) on the last empty paragraph block.
+* Widgets Screen:
+ * Add the [in progress state](https://github.com/WordPress/gutenberg/pull/16019) to the save button.
+ * Add the RichText [Format Library](https://github.com/WordPress/gutenberg/pull/15948).
+* Improve the [Group and Ungroup icons](https://github.com/WordPress/gutenberg/pull/16001).
+* The [Spacer block clears all](https://github.com/WordPress/gutenberg/pull/15874) the previous floated blocks.
+
+### Bug Fixes
+
+* [Focus the Button block’s input](https://github.com/WordPress/gutenberg/pull/15951) upon creation.
+* Prevent [Embed block crashes](https://github.com/WordPress/gutenberg/pull/15866) when used inside locked containers.
+* Properly [center the default appender placeholder](https://github.com/WordPress/gutenberg/pull/15868).
+* Correct [default appender icon transition jump](https://github.com/WordPress/gutenberg/pull/15892) in Safari.
+* Only apply [appender margins](https://github.com/WordPress/gutenberg/pull/15888) when the appender is inside of a block.
+* Avoid loading [reusable blocks editor styles](https://github.com/WordPress/gutenberg/pull/14607) in the frontend.
+* Correct [position of the "Remove Featured Image" button](https://github.com/WordPress/gutenberg/pull/15928) on small screens.
+* Allow the [legacy widget block to render core widgets](https://github.com/WordPress/gutenberg/pull/15396).
+* A11y:
+ * Fix [wrong tab order in the data picker](https://github.com/WordPress/gutenberg/pull/15936) component.
+ * Remove the [access keyboard shortcuts](https://github.com/WordPress/gutenberg/pull/15191) from the Format Library.
+* Bail early in [createUpgradedEmbedBlock](https://github.com/WordPress/gutenberg/pull/15885) for invalid block types.
+* Fix [DateTimePicker styles](https://github.com/WordPress/gutenberg/pull/15389) when used outside the WordPress context.
+* Prevent the [Spacer block from being deselected](https://github.com/WordPress/gutenberg/pull/15884) when resized.
+* Remove the [word breaking from the Media & Text](https://github.com/WordPress/gutenberg/pull/15871) block.
+* [Keep the seconds value untouched](https://github.com/WordPress/gutenberg/pull/15495) when editing dates using the DateTimePicker component.
+* Fix [tooltips styles](https://github.com/WordPress/gutenberg/pull/16043) specificity.
+* Fix php errors happening when [calling get_current_screen](https://github.com/WordPress/gutenberg/pull/15983).
+
+### Various
+
+* Introduce [useSelect](https://github.com/WordPress/gutenberg/pull/15737) and [useDispatch](https://github.com/WordPress/gutenberg/pull/15896) hooks to the data module.
+* Adding embedded [performance tests](https://github.com/WordPress/gutenberg/pull/14506) to the repository.
+* Support the [full plugin release process](https://github.com/WordPress/gutenberg/pull/15848) in the automated release tool.
+* Speed up the [packages build](https://github.com/WordPress/gutenberg/pull/15230) [tool](https://github.com/WordPress/gutenberg/pull/15920) script and the [Gutenberg plugin build](https://github.com/WordPress/gutenberg/pull/15226) config.
+* Extract media upload logic part into a new [@wordpress/media-utils package](https://github.com/WordPress/gutenberg/pull/15521).
+* Introduce [**Milestone-It** Github Action](https://github.com/WordPress/gutenberg/pull/15826) to auto-assign milestones to merged PRs.
+* Move the [transformStyles function](https://github.com/WordPress/gutenberg/pull/15572) to the block-editor package to use in the widgets screen.
+* Allow plugin authors to [override the default anchor attribute](https://github.com/WordPress/gutenberg/pull/15959) definition.
+* Add [overlayColor classname to cover blocks](https://github.com/WordPress/gutenberg/pull/15939) editor markup.
+* [Skip downloading chromium](https://github.com/WordPress/gutenberg/pull/15886) when building the plugin zip.
+* Add an [e2e test to check the heading colors](https://github.com/WordPress/gutenberg/pull/15784) [feature](https://github.com/WordPress/gutenberg/pull/15917).
+* [Lint the ESlint config file](https://github.com/WordPress/gutenberg/pull/15887) (meta).
+* Fix [i18n ESlint rules](https://github.com/WordPress/gutenberg/pull/15839) and use them in the [Gutenberg setup](https://github.com/WordPress/gutenberg/pull/15877).
+* Fix error in the [plugin release tool](https://github.com/WordPress/gutenberg/pull/15840) when switching branches.
+* Remove [unused stylesheet file](https://github.com/WordPress/gutenberg/pull/15845).
+* Improve the setup of the WordPress packages [package.json files](https://github.com/WordPress/gutenberg/pull/15879).
+* Remove the use of [popular plugins in e2e tests](https://github.com/WordPress/gutenberg/pull/15940).
+* Ignore [linting files located in build](https://github.com/WordPress/gutenberg/pull/15977) folders by default.
+* Add [default file patterns for the lint command](https://github.com/WordPress/gutenberg/pull/15890) of @wordpress/scripts.
+* Extract the [ServerSideRender](https://github.com/WordPress/gutenberg/pull/15635) component to an independent package.
+* Refactor the [HoverArea component as a React Hook](https://github.com/WordPress/gutenberg/pull/15038) instead.
+* Remove [useless dependency](https://github.com/WordPress/gutenberg/pull/16034) from the @wordpress/edit-post package.
+* [Deprecate components/selectors and actions](https://github.com/WordPress/gutenberg/pull/15770) moved to the editor package.
+* Update [browserslist](https://github.com/WordPress/gutenberg/pull/16066) dependency.
+
+### Documentation
+
+* Document the [remaining APIs](https://github.com/WordPress/gutenberg/pull/15176) of the data module.
+* Add an [ESNext example](https://github.com/WordPress/gutenberg/pull/15828) to the i18n docs.
+* Fix inline docs and add tests for [color utils](https://github.com/WordPress/gutenberg/pull/15861).
+* Document missing [MenuItem prop](https://github.com/WordPress/gutenberg/pull/16061).
+* Typos and tweaks: [1](https://github.com/WordPress/gutenberg/pull/15835), [2](https://github.com/WordPress/gutenberg/pull/15836), [3](https://github.com/WordPress/gutenberg/pull/15831), [4](https://github.com/WordPress/gutenberg/pull/15697), [5](https://github.com/WordPress/gutenberg/pull/14841), [6](https://github.com/WordPress/gutenberg/pull/15717), [7](https://github.com/WordPress/gutenberg/pull/15942), [8](https://github.com/WordPress/gutenberg/pull/15950), [9](https://github.com/WordPress/gutenberg/pull/16059).
+
+### Mobile
+
+* Fix [caret position](https://github.com/WordPress/gutenberg/pull/15833) when splitting text blocks.
+* Fix the initial value of the [“Open in New Tab” toggle](https://github.com/WordPress/gutenberg/pull/15812).
+* Fix [Video block crash](https://github.com/WordPress/gutenberg/pull/15857) on drawing on Android.
+* Fix caret position after [inline paste](https://github.com/WordPress/gutenberg/pull/15701).
+* [Focus the RichText component](https://github.com/WordPress/gutenberg/pull/15878) on block mount.
+* Port [KeyboardAvoidingView, KeyboardAwareFlatList and ReadableContentView](https://github.com/WordPress/gutenberg/pull/15913) to the @wordpress/components package.
+* Fix [press of Enter on post title](https://github.com/WordPress/gutenberg/pull/15944).
+* Move the [native unit tests](https://github.com/WordPress/gutenberg/pull/15589) to the Gutenberg repository.
+* Improve the [styling of the Quote block](https://github.com/WordPress/gutenberg/pull/15990).
+* Share [RichText line separator logic](https://github.com/WordPress/gutenberg/pull/15946) between web and native implementations.
+* Fix [Video block showing a black background](https://github.com/WordPress/gutenberg/pull/15991) when upload is in progress or upload has failed.
+* Allow passing a [style prop to the Icon](https://github.com/WordPress/gutenberg/pull/15778) component.
+* Enable [sound on the Video block](https://github.com/WordPress/gutenberg/pull/15997).
+* [Start playback immediately](https://github.com/WordPress/gutenberg/pull/15998) after video goes full screen.
+* Fix [mobile quotes](https://github.com/WordPress/gutenberg/pull/16013) insertion and removal of empty lines.
+* Move [unselected block accessibility handling](https://github.com/WordPress/gutenberg/pull/15225) to block-holder.
+* Make the [More block ready-only](https://github.com/WordPress/gutenberg/pull/16005).
+* Fix crash when [deleting all content of RichText](https://github.com/WordPress/gutenberg/pull/16018) based block.
+* Fix for [extra BR tag on Title field](https://github.com/WordPress/gutenberg/pull/16021) on Android.
+* Open [Video, Quote and More blocks](https://github.com/WordPress/gutenberg/pull/16031) to public.
+
+= 5.8.0 =
+
+# Features
+
+- Support changing the text color in the Heading block.
+- Support reordering gallery images.
+- Complete the initial version of the widgets screen POC
+ - Add an experimental endpoint to fetch the block-based widget areas.
+ - Connect the screen to the widget areas endpoint.
+ - Load the widget scripts.
+ - Load colors, font sizes and file upload settings in the widgets screen.
+ - Render the block based widget areas in the frontend.
+
+# Enhancements
+
+- Clarify the label of the custom classname inspector panel.
+- Update Calendar block icon for better alignment with the Archives block icon.
+- Add width constraints to the Media & Text block.
+- Allow dropping blocks into container blocks using the new block appender.
+- Provide default margins for the Latest Posts block excerpts.
+
+# Bug Fixes
+
+- Support block style variations for container blocks.
+- A11y
+ - Use semantic markup for the document outline.
+ - Fix the reading order of the keyboard shortcuts modal.
+ - Add a visible help text to the tags input.
+ - Update the icon of the Heading block.
+ - Move the View Posts anchor out of the toolbar section in the header.
+ - Close the block settings menu after removing the block.
+- Fix the blurriness of the disabled block switcher icons.
+- Fix missing template validation warning.
+- Fix several content spitting issues and make the onSplit prop stable.
+- Allow the Shortcode block field to expand automatically.
+- Left pad the DateTimePicker minutes input.
+- Fix the frontend classname used for the Latest Posts block excerpts.
+- Fix error happening when deleting the last block if the paragraph block is unregistered.
+- Fix focus jumps when typing in meta block fields.
+
+# Documentation
+
+- Improve the Slot/Fill documentation.
+- Document the Github teams used in the repository.
+- Document the icon prop for the MediaPlaceholder component.
+- Update the changelogs maintenance documentation.
+- Clarify the save function documentation to discourage side effects.
+- Clarify the block attributes documentation.
+- Replace @link with @see in JSDocs.
+- Fixes and tweaks to the API docs generation tool.
+- Typos and tweaks: 1, 2, 3, 4, 5, 6, 7, 8.
+
+# Various
+
+- Add a new editor setting to allow disabling the code editor.
+- Add a new @wordpress/data-controls package.
+- Add an automation tool to simplify the Gutenberg release process.
+- Support the all hook in non-production environments.
+- Expose hasResolver property on the data module selectors.
+- Support multiple pattern replacement for the custom-templated-path-webpack-plugin package.
+- Update node-sass dependency to support the latest Node.js version.
+- Fix React warning showing when loading the editor (Fill component).
+- Fix React warning message when using the Image block.
+- Refactor the popover component using React Hooks.
+- Remove WebpackRTLPlugin usage.
+- Remove an outdated chrome fix for iframes drag and drop.
+- Skip Chromium download in Travis by default.
+- Rewrite Node.js packages to use CommonJS exports.
+- Speed up Docker and e2e tests setup Travis.
+- Extracted the deprecated block version declarations to their own files.
+- Add missing file from the published @wordpress/dependency-extraction-webpack-plugin-files package.
+- Upgrade package dependencies: Lerna and Webpack Bundle Analyzer.
+
+# Mobile
+
+- Add the Quote block.
+- Make the Video block publicly available.
+- Fix bug when merging blocks.
+- Improve the UI/UX of the different media blocks.
+- Support nested lists.
+- Fix Image block with an undefined url.
+- Support rich captions in the Image block.
+- Improve screen reader support on BottomSheet’s cells.
+- Fix several focus related bugs.
+- Fix undo related issue.
+- Update onSplit method on the native RichText component to the latest version.
+- Move the BottomSheet component to the @wordpress/components package.
+- Handle the iOS z-gesture to exit modals and block selection.
+- Implement the invalid block content UI.
+
+= 5.7.0 =
+
+## Features
+
+* Support setting a [width to the column block](https://github.com/WordPress/gutenberg/pull/15499).
+* Support showing [Post Content or excerpt in the Latest Posts](https://github.com/WordPress/gutenberg/pull/14627) [block](https://github.com/WordPress/gutenberg/pull/15453).
+* Support [headers and footers in the Table block](https://github.com/WordPress/gutenberg/pull/15409).
+
+## Enhancement
+
+* Improve the UX of the Group block by using the [individual block appender](https://github.com/WordPress/gutenberg/pull/14943).
+* Support [updating images using Drag & Drop](https://github.com/WordPress/gutenberg/pull/14983).
+* Clarify the name of the [inline code format](https://github.com/WordPress/gutenberg/pull/15199).
+* Add a usability [warning when audio/video autoplay](https://github.com/WordPress/gutenberg/pull/15575) is applied.
+* Replace the [Page Break block icon](https://github.com/WordPress/gutenberg/pull/15627) with Material version.
+
+## Bug Fixes
+
+* A11y:
+ * Fix [focal point picker input labels](https://github.com/WordPress/gutenberg/pull/15255).
+ * Add role to the [copy all content menu item](https://github.com/WordPress/gutenberg/pull/15383).
+ * Add [focus style to the document outline](https://github.com/WordPress/gutenberg/pull/15479) panel.
+ * Update the [save indicator contrast](https://github.com/WordPress/gutenberg/pull/15514) to pass AA.
+ * Fix The [tabbing order in the Gallery Block](https://github.com/WordPress/gutenberg/pull/15540).
+ * Improve the [contrast of the button focus styles](https://github.com/WordPress/gutenberg/pull/15544).
+ * Fixed [focus state of pressed AM/PM buttons](https://github.com/WordPress/gutenberg/pull/15582).
+ * Fix the [URLInput aria properties](https://github.com/WordPress/gutenberg/pull/15564).
+ * Avoid showing [pre-publish panel buttons](https://github.com/WordPress/gutenberg/pull/15460) as links.
+ * Fix the [focus state of the links shown as buttons](https://github.com/WordPress/gutenberg/pull/15601).
+* Fix [RTL keyboard interactions](https://github.com/WordPress/gutenberg/pull/15496).
+* Fix [updates to RichText formats not being reflected in the UI](https://github.com/WordPress/gutenberg/pull/15573) synchronously.
+* Fix extra line breaks added when [pasting from Google Docs](https://github.com/WordPress/gutenberg/pull/15557).
+* Fix [copy, paste JavaScript errors](https://github.com/WordPress/gutenberg/pull/14712) in paragraph blocks with locking enabled.
+* Fix [format buttons incorrectly toggled](https://github.com/WordPress/gutenberg/pull/15466) on RichText blur.
+* Preserve the [caret’s horizontal position](https://github.com/WordPress/gutenberg/pull/15624) when navigating blocks.
+* [Case-insensitive search](https://github.com/WordPress/gutenberg/pull/14786) for existing categories.
+* Prevent the [Code block from rendering embeds](https://github.com/WordPress/gutenberg/pull/13996) or shortcodes.
+* Fix the [SandBox component usage outside the WP-admin](https://github.com/WordPress/gutenberg/pull/15415) context.
+* Fix the [Cover block’s deprecated version](https://github.com/WordPress/gutenberg/pull/15449) attributes.
+* Fix the [webpack dependency plugin](https://github.com/WordPress/gutenberg/pull/15430): filename function handling.
+* Support [watching block.json changes](https://github.com/WordPress/gutenberg/pull/15455) in our build tool.
+* Fix [ServerSideRender remaining in loading state](https://github.com/WordPress/gutenberg/pull/15412) when nothing is rendered.
+* Fix the [server-side registered blocks](https://github.com/WordPress/gutenberg/pull/15414) in the widgets screen.
+* Show the [block movers in the widgets](https://github.com/WordPress/gutenberg/pull/15076) screen.
+* Decode the [HTML entities in the post author selector](https://github.com/WordPress/gutenberg/pull/15090).
+* Fix [inconsistent heading sizes](https://github.com/WordPress/gutenberg/pull/15393) between the classic and the heading blocks.
+* Add [check for author in post data before meta boxes save](https://github.com/WordPress/gutenberg/pull/15375) request submission.
+* [Allow blocks drag & drop](https://github.com/WordPress/gutenberg/pull/14521) if locking is set to "insert".
+* Fix [Youtube embed styles](https://github.com/WordPress/gutenberg/pull/14748) when used multiple times in a post.
+* [Proxy the code/block-editor replaceBlock](https://github.com/WordPress/gutenberg/pull/15528) action in the core/editor package.
+* Use [block-editor instead of editor in cover block](https://github.com/WordPress/gutenberg/pull/15547).
+* Fix [block showing an error in Safari](https://github.com/WordPress/gutenberg/pull/15576) when focused.
+* Fix small visual error in the [active state of the formatting buttons](https://github.com/WordPress/gutenberg/pull/15592).
+* Fix the pinned [plugins buttons styles](https://github.com/WordPress/gutenberg/pull/15609) when toggled.
+* Set caret position correctly when [merging blocks using the Delete key](https://github.com/WordPress/gutenberg/pull/15599).
+
+## Documentation
+
+* Clarify [best practices pertaining to Color Palette](https://github.com/WordPress/gutenberg/pull/15006) values.
+* Use [Block Editor instead of Gutenberg](https://github.com/WordPress/gutenberg/pull/15411) when appropriate in the Handbook.
+* [Omit docblocks with private tag](https://github.com/WordPress/gutenberg/pull/15173) in the API Docs generation.
+* Update docs for [selectors & actions moved to block-editor](https://github.com/WordPress/gutenberg/pull/15424).
+* Update i18n docs to use [make-json command](https://github.com/WordPress/gutenberg/pull/15303) from wp-cli.
+* Consolidate [doc generation tools](https://github.com/WordPress/gutenberg/pull/15421).
+* Fix [next/previous links issue](https://github.com/WordPress/gutenberg/pull/15456).
+* Webpack dependency plugin: Document [unsupported multiple instances](https://github.com/WordPress/gutenberg/pull/15451).
+* Add a [DevHub manifest file](https://github.com/WordPress/gutenberg/pull/15254) to allow synchronizing the documentation to the DevHub.
+* Typos and tweaks: [1](https://github.com/WordPress/gutenberg/pull/15251), [2](https://github.com/WordPress/gutenberg/pull/15204), [3](https://github.com/WordPress/gutenberg/pull/15260), [4](https://github.com/WordPress/gutenberg/pull/15262), [5](https://github.com/WordPress/gutenberg/pull/15170), [6](https://github.com/WordPress/gutenberg/pull/15386), [7](https://github.com/WordPress/gutenberg/pull/15423), [8](https://github.com/WordPress/gutenberg/pull/15448), [9](https://github.com/WordPress/gutenberg/pull/15454), [10](https://github.com/WordPress/gutenberg/pull/15494), [11](https://github.com/WordPress/gutenberg/pull/15506), [12](https://github.com/WordPress/gutenberg/pull/15527), [13](https://github.com/WordPress/gutenberg/pull/15508), [14](https://github.com/WordPress/gutenberg/pull/15505), [15](https://github.com/WordPress/gutenberg/pull/15612).
+
+## Various
+
+* Support and use the [shorthand Fragment](https://github.com/WordPress/gutenberg/pull/15120) [syntax](https://github.com/WordPress/gutenberg/pull/15261).
+* Update to [Babel 7.4 and core-js 3](https://github.com/WordPress/gutenberg/pull/15139).
+* Upgrade [simple-html-tokenizer](https://github.com/WordPress/gutenberg/pull/15246) dependency.
+* Pass individual files as arguments from watch to [build script](https://github.com/WordPress/gutenberg/pull/15219).
+* Automate the [scripts dependencies](https://github.com/WordPress/gutenberg/pull/15124) generation.
+* [Clean DropZone](https://github.com/WordPress/gutenberg/pull/15224) component’s unused state.
+* remove [\_\_unstablePositionedAtSelection](https://github.com/WordPress/gutenberg/pull/15035) component.
+* Refactor core/edit-post [INIT effect to use action-generators](https://github.com/WordPress/gutenberg/pull/14740) and controls.
+* Improve [eslint disable comments](https://github.com/WordPress/gutenberg/pull/15384).
+* Fix NaN [warning when initializing the FocalPointPicker](https://github.com/WordPress/gutenberg/pull/15400) component.
+* [Export React.memo](https://github.com/WordPress/gutenberg/pull/15385) in the @wordpress/element package.
+* Improve the [specificity of the custom colors styles](https://github.com/WordPress/gutenberg/pull/15167).
+* [Preload the autosaves endpoint](https://github.com/WordPress/gutenberg/pull/15067) to avoid request when loading the editor.
+* A11y: Add support for [Axe verification in e2e tests](https://github.com/WordPress/gutenberg/pull/15018).
+* Refactor the [File block to use the block.json](https://github.com/WordPress/gutenberg/pull/14862) syntax.
+* Remove [redundant duplicated reducers](https://github.com/WordPress/gutenberg/pull/15142).
+* Add [integration tests for blocks with deprecations](https://github.com/WordPress/gutenberg/pull/15268).
+* Allow [non-production env in wp-scripts build](https://github.com/WordPress/gutenberg/pull/15480).
+* Use [React Hooks in the BlockListBlock component](https://github.com/WordPress/gutenberg/pull/14985).
+* Add an [e2e test for custom taxonomies](https://github.com/WordPress/gutenberg/pull/15151).
+* Fix [intermittent failures on block transforms](https://github.com/WordPress/gutenberg/pull/15485) tests.
+* Remove [componentWillReceiveProps usage from ColorPicker](https://github.com/WordPress/gutenberg/pull/11772).
+* Add an [experimental](https://github.com/WordPress/gutenberg/pull/15563) [CPT to be used in the block based widgets screen](https://github.com/WordPress/gutenberg/pull/15014).
+* Split [JavaScript CI tasks to individual jobs](https://github.com/WordPress/gutenberg/pull/15229).
+* Remove [unnecessary aria-label from the block inserter](https://github.com/WordPress/gutenberg/pull/15382) list items.
+
+## Mobile
+
+* Add a first version of the [video block](https://github.com/WordPress/gutenberg/pull/14912).
+* Fix the [Auto-scroll behavior on List](https://github.com/WordPress/gutenberg/pull/15048) block.
+* Fix the [list handling on Android](https://github.com/WordPress/gutenberg/pull/15168).
+* Improve [accessibility of the missing block](https://github.com/WordPress/gutenberg/pull/15457).
+
+= 5.6.1 =
+
+## Miscellaneous
+
+- Republish Gutenberg 5.6.0.
+
+= 5.6.0 =
+
+## Enhancements
+
+- Improve [focus state for button block](https://github.com/WordPress/gutenberg/pull/15058).
+- [Reduce specificity of block styles](https://github.com/WordPress/gutenberg/pull/14407) to make it easier for themes to style the editor.
+- Optimize data subscribers to [avoid unnecessary work](https://github.com/WordPress/gutenberg/pull/15041) on each editor change.
+- Avoid [overlapping block breadcrumb](https://github.com/WordPress/gutenberg/pull/15112) when block movers are visible for full- and wide-aligned blocks.
+- Preload [user permissions for reusable blocks](https://github.com/WordPress/gutenberg/pull/15061) to avoid UI flickering for block settings menu options.
+- Remove [unnecessary bottom padding](https://github.com/WordPress/gutenberg/pull/15158) for nested lists.
+- Restore [block movers to focus mode](https://github.com/WordPress/gutenberg/pull/15109).
+- Improve display of [categories list panel](https://github.com/WordPress/gutenberg/pull/15075).
+
+## Bug Fixes
+
+- [Restore block movers](https://github.com/WordPress/gutenberg/pull/15022) to full- and wide-aligned blocks.
+- Always show [drag handles](https://github.com/WordPress/gutenberg/pull/15025) for nested blocks, even when only a single block exists.
+- Improve [HTML output for formatted text](https://github.com/WordPress/gutenberg/pull/14555).
+- Fix an [error preventing registerFormatType to be called](https://github.com/WordPress/gutenberg/pull/15072) wrongly indicated as duplicate.
+- Resolve problematic [post lock release behavior](https://github.com/WordPress/gutenberg/pull/14994) when leaving the editor when using newer versions of Chrome.
+- Resolve an issue to [detect autosave presence at editor load](https://github.com/WordPress/gutenberg/pull/7945) in considering saveability.
+- Resolve a typo which could interfere with [audio shortcode transforms](https://github.com/WordPress/gutenberg/pull/15118).
+- [Apply RichText attributes correctly](https://github.com/WordPress/gutenberg/pull/15070) to resolve an issue with registerFormatType.
+- [Preserve attributes](https://github.com/WordPress/gutenberg/pull/15128) of a multi-line classic block paragraph.
+- Resolve an issue for Windows and Linux development mode due to a [access key safeguard](https://github.com/WordPress/gutenberg/pull/15044).
+
+## Various
+
+- Refactor a number of core blocks toward better interoperability with the Blocks RFC: [[1]](https://github.com/WordPress/gutenberg/pull/14979), [[2]](https://github.com/WordPress/gutenberg/pull/14902), [[3]](https://github.com/WordPress/gutenberg/pull/14903), [[4]](https://github.com/WordPress/gutenberg/pull/14899).
+- [Move selection state](https://github.com/WordPress/gutenberg/pull/14640) for RichText components to the block editor store, to enable future work to resolve or improve selection behavior.
+- Change the behavior of reusable blocks autocomplete to [fetch upon input](https://github.com/WordPress/gutenberg/pull/14915), improving reliability of tests and avoiding unnecessary network requests.
+- Allow [development mode constant](https://github.com/WordPress/gutenberg/pull/14165) to be redefined by plugins.
+- Improve reliability of e2e tests: [[1]](https://github.com/WordPress/gutenberg/pull/13161), [[2]](https://github.com/WordPress/gutenberg/pull/15046), [[3]](https://github.com/WordPress/gutenberg/pull/15063).
+- Avoid running [files contained in the git subfolder](https://github.com/WordPress/gutenberg/pull/14997) as tests.
+- Resolve an [issue with e2e errors](https://github.com/WordPress/gutenberg/pull/14998) related to dependencies updates.
+- Add a new ESLint rule to [enforce accessible use of BaseControl](https://github.com/WordPress/gutenberg/pull/14151).
+- Remove [redundant CSS styles](https://github.com/WordPress/gutenberg/pull/14520).
+- Add e2e tests for [dynamic allowed blocks](https://github.com/WordPress/gutenberg/pull/14992), [transforms from media to embed block](https://github.com/WordPress/gutenberg/pull/13997), [explicit persistence undo regression](https://github.com/WordPress/gutenberg/pull/15049).
+- Add a new [`wpDataSelect` e2e test utility](https://github.com/WordPress/gutenberg/pull/15052).
+- Include a [React hooks ESLint configuration](https://github.com/WordPress/gutenberg/pull/14995).
+- Add a [new Webpack plugin](https://github.com/WordPress/gutenberg/pull/14869) to help externalize and extract script dependencies (not yet published).
+
+## Documentation
+
+- Include auto-generated documentation for [core data module actions and selectors](https://github.com/WordPress/gutenberg/pull/15200).
+- Update [contributing documentation](https://github.com/WordPress/gutenberg/pull/15187) to extract detailed sections to their own documents.
+- Document the [withGlobalEvents](https://github.com/WordPress/gutenberg/pull/15175) higher-order component creator.
+- Add [related resources](https://github.com/WordPress/gutenberg/pull/15194) for BlockEditor components.
+- Clarify [requirements for e2e-test-utils](https://github.com/WordPress/gutenberg/pull/15171) package.
+- [Exclude private, experimental, and unstable APIs](https://github.com/WordPress/gutenberg/pull/15188) from auto-generated data documentation.
+- Include [missing DropZone component props](https://github.com/WordPress/gutenberg/pull/15223) in documentation.
+- Mention [component stylesheets](https://github.com/WordPress/gutenberg/pull/15241) in usage instructions.
+- Update [copy/paste support list](https://github.com/WordPress/gutenberg/pull/15149) to reflect paste support of images from Microsoft Word and Libre/Open Office.
+- Add [missing "Code is Poetry" footers](https://github.com/WordPress/gutenberg/pull/15140).
+- Improve [wording of JavaScript Tutorial](https://github.com/WordPress/gutenberg/pull/14838) document.
+- Improve [Travis build performance](https://github.com/WordPress/gutenberg/pull/15228) by expanding containers for e2e tests.
+
+## Mobile
+
+- [Refine transitions](https://github.com/WordPress/gutenberg/pull/14831) for bottom sheets.
+- Extract a [HorizontalRule component](https://github.com/WordPress/gutenberg/pull/14361) for use in a cross-platform separator block.
+- Fix an [error with changing list types](https://github.com/WordPress/gutenberg/pull/15010).
+- [Avoid setting caret](https://github.com/WordPress/gutenberg/pull/15021) when rich-text text will be trimmed.
+- Fix [title not focusing](https://github.com/WordPress/gutenberg/pull/15069).
+- Improve [post title accessibility](https://github.com/WordPress/gutenberg/pull/15106).
+- Improve image block accessibility for [deselected](https://github.com/WordPress/gutenberg/pull/14713), and [selected](https://github.com/WordPress/gutenberg/pull/15122) states.
+- Add [accessibility label for unselected paragraph](https://github.com/WordPress/gutenberg/pull/15126).
+- Fix [history stack when not empty](https://github.com/WordPress/gutenberg/pull/15055) on a fresh start of the editor.
+- Improve [Heading block accessibility](https://github.com/WordPress/gutenberg/pull/15144).
+- Make [accessibility string properly localizable](https://github.com/WordPress/gutenberg/pull/15161).
+- [Update string concatenation](https://github.com/WordPress/gutenberg/pull/15181) for accessibility labels.
+
+= 5.5.0 =
+
+## Features
+
+- Add a new [Group](https://github.com/WordPress/gutenberg/pull/13964) [block](https://github.com/WordPress/gutenberg/pull/14920).
+- Add [vertical alignment](https://github.com/WordPress/gutenberg/pull/13989) support to the Media & Text block.
+- Add [the image fill option](https://github.com/WordPress/gutenberg/pull/14445) to the Media & Text block.
+
+## Enhancements
+
+- Improvements to the [Image Block](https://github.com/WordPress/gutenberg/pull/14142) [flows](https://github.com/WordPress/gutenberg/pull/14807).
+- Automatically [add `mailto:` to email addresses](https://github.com/WordPress/gutenberg/pull/14857) when linking.
+- Add [visual handles for side resizers](https://github.com/WordPress/gutenberg/pull/14543) for various blocks.
+- Improve the [performance of the](https://github.com/WordPress/gutenberg/pull/14664) [annotations](https://github.com/WordPress/gutenberg/pull/14808) by avoiding excessive memoization.
+- Announce the [color accessibility issues](https://github.com/WordPress/gutenberg/pull/14649) to screen readers.
+- Add [enum block attributes validation](https://github.com/WordPress/gutenberg/pull/14810) to browser block parser.
+- Use a [consistent grey background](https://github.com/WordPress/gutenberg/pull/14719) in the Shortcode block.
+- Improve accessibility of video block [select poster image](https://github.com/WordPress/gutenberg/pull/14752).
+- Respect [prefers-reduced-motion for fixed backgrounds](https://github.com/WordPress/gutenberg/pull/14848) in Cover block.
+- Prevent ArrowLeft key press in multi-line selection from [prematurely triggering multi-selection](https://github.com/WordPress/gutenberg/pull/14906).
+
+## Bug Fixes
+
+- Avoid keeping the [RichText value in cache](https://github.com/WordPress/gutenberg/pull/14750) indefinitely.
+- Fix the [post title input borders](https://github.com/WordPress/gutenberg/pull/14771) in the code editor.
+- Fix the [block restrictions](https://github.com/WordPress/gutenberg/pull/14003) to insert, replace or move blocks.
+- [Select gallery images](https://github.com/WordPress/gutenberg/pull/14813) on focus.
+- Fix [removing gallery images](https://github.com/WordPress/gutenberg/pull/14822) on delete/backspace key press.
+- Fix small visual regression in the [block autocompete popover](https://github.com/WordPress/gutenberg/pull/14772).
+- Fix the data module[ resolver resolution status](https://github.com/WordPress/gutenberg/pull/14711).
+- Avoid [saving metaboxes when previewing](https://github.com/WordPress/gutenberg/pull/14877) [changes](https://github.com/WordPress/gutenberg/pull/14894).
+- Fix [selecting the separator block](https://github.com/WordPress/gutenberg/pull/14854).
+- Fix displaying the [color palette](https://github.com/WordPress/gutenberg/pull/14693) [tooltips](https://github.com/WordPress/gutenberg/pull/14944) on hover.
+- Fix Firefox/NVDA bug not [announcing the toggle settings](https://github.com/WordPress/gutenberg/pull/14475) button.
+- Fix [arrow navigation in paragraph](https://github.com/WordPress/gutenberg/pull/14804) blocks with backgrounds.
+- Fix the [columns block click to select](https://github.com/WordPress/gutenberg/pull/14876).
+- Fix [post dirtiness](https://github.com/WordPress/gutenberg/pull/14916) after fetching reusable blocks.
+- Fix the hover and focus styles for [buttons with the isBusy](https://github.com/WordPress/gutenberg/pull/14469) prop.
+- Remove the box [shadow from the side inserter](https://github.com/WordPress/gutenberg/pull/14936) button.
+- Changing the [region navigation shortcuts](https://github.com/WordPress/gutenberg/pull/14681) to avoid conflicts.
+- Fix [space insertion in the Button block](https://github.com/WordPress/gutenberg/pull/14925) in Firefox.
+- Prevent the [link popover from animating constantly](https://github.com/WordPress/gutenberg/pull/14938) as we type.
+- Fix the warning triggered by [clearing the height of the spacer block](https://github.com/WordPress/gutenberg/pull/14785).
+- Fix [undo behavior](https://github.com/WordPress/gutenberg/pull/14955) after fresh post loading.
+
+## Documentation
+
+- Add design documentation to the [Modal component](https://github.com/WordPress/gutenberg/pull/14757).
+- Clarify the [CSS naming coding guidelines](https://github.com/WordPress/gutenberg/pull/14556).
+- Add [InspectorControls usage example](https://github.com/WordPress/gutenberg/pull/11736).
+- Tweaks and typos: [1](https://github.com/WordPress/gutenberg/pull/14736), [2](https://github.com/WordPress/gutenberg/pull/14737), [3](https://github.com/WordPress/gutenberg/pull/14762), [4](https://github.com/WordPress/gutenberg/pull/14741), [5](https://github.com/WordPress/gutenberg/pull/14756), [6](https://github.com/WordPress/gutenberg/pull/14778), [7](https://github.com/WordPress/gutenberg/pull/14827), [8](https://github.com/WordPress/gutenberg/pull/14895), [9](https://github.com/WordPress/gutenberg/pull/14909), [10](https://github.com/WordPress/gutenberg/pull/14917), [11](https://github.com/WordPress/gutenberg/pull/14940), [12](https://github.com/WordPress/gutenberg/pull/14941), [13](https://github.com/WordPress/gutenberg/pull/14964).
+
+## Various
+
+- Bootstrap the design of the [new widgets screen](https://github.com/WordPress/gutenberg/pull/14612) (non functional yet).
+- Reorganization of the block-library code base:
+ - Use a babel plugin to [load block.json files](https://github.com/WordPress/gutenberg/pull/14551).
+ - Introduce [block.json metadata](https://github.com/WordPress/gutenberg/pull/14770) [for](https://github.com/WordPress/gutenberg/pull/14863) all client side blocks.
+ - Move [the edit functions and the icons](https://github.com/WordPress/gutenberg/pull/14743) to separate files.
+ - Move the [transforms and save functions](https://github.com/WordPress/gutenberg/pull/14882) to separate files.
+- Add [forwardRef support to the PlainText](https://github.com/WordPress/gutenberg/pull/14866) component.
+- Support [Button Block Appender](https://github.com/WordPress/gutenberg/pull/14241) in the InnerBlocks component.
+- [Unset the focal point attributes](https://github.com/WordPress/gutenberg/pull/14746) from the Cover block if not needed.
+- [Consistently return promises](https://github.com/WordPress/gutenberg/pull/14830) from the data module action calls.
+- Remove obsolete [CSS currentColor](https://github.com/WordPress/gutenberg/pull/14119) usage.
+- Improve the [e2e test CLI arguments](https://github.com/WordPress/gutenberg/pull/14717) and docs.
+- Improve the [e2e test login stability](https://github.com/WordPress/gutenberg/pull/14243) on MacOS.
+- Remove [is-plain-obj package](https://github.com/WordPress/gutenberg/pull/14751) dependency.
+- Remove invalid urls and ids from [media test](https://github.com/WordPress/gutenberg/pull/14625/files) [fixtures](https://github.com/WordPress/gutenberg/pull/14790).
+- Remove the [deprecated Gutenberg plugin functions](https://github.com/WordPress/gutenberg/pull/14806) slated for 5.4 and 5.5.
+- remove or rename [undocumented RichText package functions](https://github.com/WordPress/gutenberg/pull/14239) and constants.
+- Adjust [paragraph block spacing](https://github.com/WordPress/gutenberg/pull/14679) to use standardised variables.
+- Allow [spaces in file paths](https://github.com/WordPress/gutenberg/pull/14789) for package build process.
+- Update pre-commit to [check modified files only](https://github.com/WordPress/gutenberg/pull/14971).
+- Improve the [performance of the webpack build](https://github.com/WordPress/gutenberg/pull/14860) configuration.
+- [Update dependencies](https://github.com/WordPress/gutenberg/pull/14978) with known vulnerabilities.
+- Fix [typo in variable names](https://github.com/WordPress/gutenberg/pull/14970).
+
+## Mobile
+
+- [Accessibility improvements to the Button](https://github.com/WordPress/gutenberg/pull/14697) component.
+- Enhance the [unsupported block type](https://github.com/WordPress/gutenberg/pull/14577).
+- Fix [image upload progress](https://github.com/WordPress/gutenberg/pull/14799) not being displayed consistently.
+- Support [copy/pasting images](https://github.com/WordPress/gutenberg/pull/14802).
+- Add [the](https://github.com/WordPress/gutenberg/pull/14865) [list block](https://github.com/WordPress/gutenberg/pull/14636).
+- Visual [refinements for the native nextpage](https://github.com/WordPress/gutenberg/pull/14826) block.
+- Fix [importing the column](https://github.com/WordPress/gutenberg/pull/14880) block.
+- Remove DOM logic from the [list block toolbar](https://github.com/WordPress/gutenberg/pull/14840).
+- Put the caret at the end of the text field after [merging blocks](https://github.com/WordPress/gutenberg/pull/14820).
+- Fix caret position [after](https://github.com/WordPress/gutenberg/pull/14957) [inline paste](https://github.com/WordPress/gutenberg/pull/14893).
+
+= 5.4.0 =
+
+### Features
+
+- Add [vertical alignment support for the columns](https://github.com/WordPress/gutenberg/pull/13899) [block](https://github.com/WordPress/gutenberg/pull/14614).
+- Add [playsinline support](https://github.com/WordPress/gutenberg/pull/14500) for the video block.
+
+### Enhancements
+
+- Add the [Media Library button](https://github.com/WordPress/gutenberg/issues/8309) to the gallery block appender.
+- Improve appearance of the block [hover state on colored backgrounds](https://github.com/WordPress/gutenberg/pull/14501).
+- Move the [color and font size caption styles](https://github.com/WordPress/gutenberg/pull/14366) into theme styles.
+- Replace the [verse block icon](https://github.com/WordPress/gutenberg/pull/14622).
+- Standardize [align and className attributes](https://github.com/WordPress/gutenberg/pull/14533) for dynamic blocks.
+- Remove the [title from mobile inserters](https://github.com/WordPress/gutenberg/pull/14493).
+- Capitalize [button labels](https://github.com/WordPress/gutenberg/pull/14591).
+- [Remove menu toggling](https://github.com/WordPress/gutenberg/pull/14456) on checkbox, radio buttons clicks.
+- Make the [invisible image resize handlers](https://github.com/WordPress/gutenberg/pull/14481) bigger.
+- Improve the [alt text field description](https://github.com/WordPress/gutenberg/pull/14668).
+
+### Bug Fixes
+
+- Improve the [format boundary styles](https://github.com/WordPress/gutenberg/pull/14519).
+- [Convert void blocks properly](https://github.com/WordPress/gutenberg/pull/14536) when converting or pasting content.
+- Fix the [ClipboardButton](https://github.com/WordPress/gutenberg/pull/7106) component behavior in Safari.
+- Fix [expanding the text selection](https://github.com/WordPress/gutenberg/pull/14487) when using shift + vertical arrows.
+- Fix the alignment of the [third-party block settings items](https://github.com/WordPress/gutenberg/pull/14569).
+- Fix [invalid HTML](https://github.com/WordPress/gutenberg/pull/14423) [in](https://github.com/WordPress/gutenberg/pull/14599) some more menu items.
+- Fix [JavaScript error in the columns](https://github.com/WordPress/gutenberg/pull/14605) block.
+- Fix [radio button](https://github.com/WordPress/gutenberg/pull/14624) [appearance](https://github.com/WordPress/gutenberg/pull/14684) on small screens.
+- Save [line breaks in the preformatted](https://github.com/WordPress/gutenberg/pull/14653) block.
+- Fix edge case in the [is_gutenberg_page](https://github.com/WordPress/gutenberg/pull/14558) plugin function.
+- Fix [toolbar position](https://github.com/WordPress/gutenberg/pull/14669) in full size aligned blocks on small screens.
+- Fix [double scrollbar issue](https://github.com/WordPress/gutenberg/pull/14677) in Full Screen mode.
+- Fix JavaScript error when [downgrading to an old Gutenberg version](https://github.com/WordPress/gutenberg/pull/14691).
+- Fix the [WordPress embed block](https://github.com/WordPress/gutenberg/pull/14658) resolution.
+- Fix embedding [links with trailing slashes](https://github.com/WordPress/gutenberg/pull/14705).
+- Fix the [preloading apiFetch middleware](https://github.com/WordPress/gutenberg/pull/14714) when initialized empty.
+- Fix php notice when using [widgets without](https://github.com/WordPress/gutenberg/pull/14587) [description](https://github.com/WordPress/gutenberg/pull/14615).
+- Better [horizontal edge detection](https://github.com/WordPress/gutenberg/pull/14462) to fix the arrow key navigation in the table block.
+- Fix error in [API Fetch initialization](https://github.com/WordPress/gutenberg/pull/14714).
+- Fix [unwanted margin](https://github.com/WordPress/gutenberg/pull/14614) in Column block.
+- Fixes [issue where emoji would be destroyed](https://github.com/WordPress/gutenberg/pull/14411).
+
+### Documentation
+
+- Document the [block editor module](https://github.com/WordPress/gutenberg/pull/14566).
+- Add design documentation for the [Panel](https://github.com/WordPress/gutenberg/pull/14504) component.
+- Document [webpack config extensibility](https://github.com/WordPress/gutenberg/pull/14590).
+- Clarify [experimental and unstable API](https://github.com/WordPress/gutenberg/pull/14557) guidelines.
+- Setup automatic [API documentation for the data](https://github.com/WordPress/gutenberg/pull/14277) module.
+- Improve the [automatic](https://github.com/WordPress/gutenberg/pull/14549) [API](https://github.com/WordPress/gutenberg/pull/14656) documentation tool.
+- Enhance the components documentation:
+ - [FormFileUpload](https://github.com/WordPress/gutenberg/pull/14661) component.
+ - [MediaPlaceholder](https://github.com/WordPress/gutenberg/pull/14645) component.
+ - [Notice](https://github.com/WordPress/gutenberg/pull/14514) component.
+ - [TextControl](https://github.com/WordPress/gutenberg/pull/14710) component.
+- Updates the [blocks creation tutorial](https://github.com/WordPress/gutenberg/pull/14584).
+- Typos & tweaks: [1](https://github.com/WordPress/gutenberg/pull/14490), [2](https://github.com/WordPress/gutenberg/pull/14516), [3](https://github.com/WordPress/gutenberg/pull/14530), [4](https://github.com/WordPress/gutenberg/pull/14565), [5](https://github.com/WordPress/gutenberg/pull/14597), [6](https://github.com/WordPress/gutenberg/pull/14368), [7](https://github.com/WordPress/gutenberg/pull/14666), [8](https://github.com/WordPress/gutenberg/pull/14686), [9](https://github.com/WordPress/gutenberg/pull/14690).
+
+### Various
+
+- Implement a built-in static [Gutenberg Playground](https://github.com/WordPress/gutenberg/pull/14497).
+- [Override core block server-side code](https://github.com/WordPress/gutenberg/pull/13521) when using the plugin.
+- Make the [block](https://github.com/WordPress/gutenberg/pull/14527) [editor](https://github.com/WordPress/gutenberg/pull/14387) [module](https://github.com/WordPress/gutenberg/pull/14548) [more](https://github.com/WordPress/gutenberg/pull/14678) reusable.
+- Expose the [lazy and Suspence](https://github.com/WordPress/gutenberg/pull/14412) React features in the element package.
+- Avoid assuming persisted [preferences state shape](https://github.com/WordPress/gutenberg/pull/14692).
+- Remove dead code from the [calendar block renderer](https://github.com/WordPress/gutenberg/pull/14546).
+- Extract [global CSS resets](https://github.com/WordPress/gutenberg/pull/14509) [into](https://github.com/WordPress/gutenberg/pull/14572) reusable mixins.
+- Replace [image urls by base 64 encoded images](https://github.com/WordPress/gutenberg/pull/14544) in reusable CSS files.
+- Add default empty implementation for the [block types save](https://github.com/WordPress/gutenberg/pull/14510) [function](https://github.com/WordPress/gutenberg/pull/14529).
+- Add a new data action to [replace the inner blocks](https://github.com/WordPress/gutenberg/pull/14291).
+- Support [parent data registry inheritance](https://github.com/WordPress/gutenberg/pull/14369) in the data module.
+- Add [extra props support for the Dashicon](https://github.com/WordPress/gutenberg/pull/14631) component.
+- Add a [BaseControl.VisualLabel](https://github.com/WordPress/gutenberg/pull/14179) component for purely visual labels.
+- Refactor [setupEditor effects to actions](https://github.com/WordPress/gutenberg/pull/14513).
+- Refactor the [core/data store](https://github.com/WordPress/gutenberg/pull/14634) to be independent from the registry object.
+- Remove [componentWillMount](https://github.com/WordPress/gutenberg/pull/14637) usage from LatestPostEdit component.
+- Add a generic [e2e test for block transforms](https://github.com/WordPress/gutenberg/pull/12336) and work on its [stability](https://github.com/WordPress/gutenberg/pull/14632).
+- Allow e2e test failures for [php versions lower than 5.6](https://github.com/WordPress/gutenberg/pull/14541).
+- Add eslint rule to prevent [incorrect truthy length property](https://github.com/WordPress/gutenberg/pull/14579/) checks.
+- Add eslint rule to [prevent unsafe setTimeout usage](https://github.com/WordPress/gutenberg/pull/14650) in components.
+- Run the local gutenberg environment in [debug mode](https://github.com/WordPress/gutenberg/pull/14371).
+- Disable [debug mode in local e2e tests](https://github.com/WordPress/gutenberg/pull/14638).
+- [Exclude test files](https://github.com/WordPress/gutenberg/pull/14468) while rebuilding packages.
+- [Make E2E tests resilient](https://github.com/WordPress/gutenberg/pull/14632) against transforms added by plugins.
+- Add [LGPL](https://github.com/WordPress/gutenberg/pull/14734) as an OSS license.
+
+= 5.3.0 =
+
+### Features
+
+ - Add the [block management modal](https://github.com/WordPress/gutenberg/pull/14224): Ability to hide/show blocks in the inserter.
+ - Support [nested blocks for the Cover Block](https://github.com/WordPress/gutenberg/pull/13822).
+ - Add an experimental [Legacy Widget Block](https://github.com/WordPress/gutenberg/pull/13511) (enabled only in the plugin for the moment).
+
+### Enhancements
+
+ - Update the [block outlines](https://github.com/WordPress/gutenberg/pull/14145) for the hover and selected states.
+ - Allow [undoing automatic pattern block transformations](https://github.com/WordPress/gutenberg/pull/13917).
+ - Add a [RichText collapsed format toolbar](https://github.com/WordPress/gutenberg/pull/14233) for code, inline image and strikethrough formats.
+ - Allow [collapsing inserter panels](https://github.com/WordPress/gutenberg/pull/13884) when searching.
+ - Add ability to transform [video shortcodes to video blocks](https://github.com/WordPress/gutenberg/pull/14042).
+ - Add ability to transform [audio shortcodes to audio blocks](https://github.com/WordPress/gutenberg/pull/14045).
+ - Add new @wordpress/data actions to [invalidate the resolvers cache](https://github.com/WordPress/gutenberg/pull/14225).
+ - Support [custom classNames in the ToggleControl](https://github.com/WordPress/gutenberg/pull/13804) component.
+ - Clarify the [button to exit the post lock](https://github.com/WordPress/gutenberg/pull/14347) modal.
+ - Improve the [block validation error message](https://github.com/WordPress/gutenberg/pull/13499).
+ - [Automatically use the WordPress](https://github.com/WordPress/gutenberg/pull/13877) [babel config](https://github.com/WordPress/gutenberg/pull/14168) when using @wordpress/scripts CLI.
+ - Add keyboard [shortcuts to indent/outdent](https://github.com/WordPress/gutenberg/pull/14343) list items.
+ - Use [links instead of buttons](https://github.com/WordPress/gutenberg/pull/10815) in the document outline.
+ - Use [`` for strikethrough](https://github.com/WordPress/gutenberg/pull/14389), [not ``](https://github.com/WordPress/gutenberg/pull/14430).
+ - Center the [tooltips content](https://github.com/WordPress/gutenberg/pull/14473).
+ - Update wording of the [block switcher tooltip](https://github.com/WordPress/gutenberg/pull/14470).
+ - Add [support for the reduced motion](https://github.com/WordPress/gutenberg/pull/14021) browser mode.
+
+### Bug Fixes
+
+ - Always show the [current month in the Calendar](https://github.com/WordPress/gutenberg/pull/13873) block for All CPTs but post.
+ - In the Latest posts block, [avoid full line clickable titles](https://github.com/WordPress/gutenberg/pull/14109).
+ - Avoid relying on DOM nodes to add the [empty line in RichText](https://github.com/WordPress/gutenberg/pull/13850) [component](https://github.com/WordPress/gutenberg/pull/14315). This fixes a number of lingering empty lines.
+ - Fix the [MediaPlaceholder icon color](https://github.com/WordPress/gutenberg/pull/14257) on dark backgrounds.
+ - Fix the [Classic block toolbar in RTL](https://github.com/WordPress/gutenberg/pull/14088) languages.
+ - Fix the [more tag in the Classic block](https://github.com/WordPress/gutenberg/pull/14173).
+ - Fix the [quote to heading](https://github.com/WordPress/gutenberg/pull/14348) block transformation.
+ - Fix “null” appearing when [merging empty headings](https://github.com/WordPress/gutenberg/pull/13981) and paragraphs.
+ - Fix the [block insertion restrictions](https://github.com/WordPress/gutenberg/pull/14020) in the global inserter.
+ - Fix the [prepareEditableTree](https://github.com/WordPress/gutenberg/pull/14284) custom RichText Format API.
+ - [Changes to the internal RichText format](https://github.com/WordPress/gutenberg/pull/14380) representation to separate objects (inline image..) from formats (bold…). This fixes a number of RichText issues.
+ - Fix the [Spinner component styling](https://github.com/WordPress/gutenberg/pull/14418) in RTL languages.
+ - Fix [focus loss when using the Set Featured Image](https://github.com/WordPress/gutenberg/pull/14415) buttons.
+ - Fix [template lock](https://github.com/WordPress/gutenberg/pull/14390) not being taken into consideration.
+ - Fix [composed characters](https://github.com/WordPress/gutenberg/pull/14449) at the beginning of RichText.
+ - Fix several [block multi-selection](https://github.com/WordPress/gutenberg/pull/14448) [bugs](https://github.com/WordPress/gutenberg/pull/14453).
+ - Allow using a [float number as a step](https://github.com/WordPress/gutenberg/pull/14322) when using the RangeControl component.
+ - Fix error when pasting a [caption shortcode without an image](https://github.com/WordPress/gutenberg/pull/14365) tag.
+ - Fix [focus loss](https://github.com/WordPress/gutenberg/pull/14444) when combining sidebars and modals (or popovers).
+ - Escape the [greater than character](https://github.com/WordPress/gutenberg/pull/9963) when serializing the blocks content into HTML.
+ - Fix [pasting links into the classic block](https://github.com/WordPress/gutenberg/pull/14485).
+ - Include missing [CSS in the classic block](https://github.com/WordPress/gutenberg/pull/12441).
+
+### Documentation
+
+ - Enhance the [i18n process documentation](https://github.com/WordPress/gutenberg/pull/13909) with a complete example.
+ - Add design guidelines to several components:
+ - The [Button](https://github.com/WordPress/gutenberg/pull/14194) component
+ - The [CheckboxControl](https://github.com/WordPress/gutenberg/pull/14153) component
+ - The [MenuItemsChoice](https://github.com/WordPress/gutenberg/pull/14465) component.
+ - The [MenuGroup](https://github.com/WordPress/gutenberg/pull/14466) component.
+ - Update the [JavaScript setup tutorial](https://github.com/WordPress/gutenberg/pull/14440) to rely on the @wordpress/scripts package.
+ - Lowercase [block editor](https://github.com/WordPress/gutenberg/pull/14205) and [classic editor](https://github.com/WordPress/gutenberg/pull/14203) terms to conform to the copy guidelines.
+ - Use [a central script](https://github.com/WordPress/gutenberg/pull/14216) to generate the JavaScript API documentation and run [in parallel](https://github.com/WordPress/gutenberg/pull/14295).
+ - Update the [packages release](https://github.com/WordPress/gutenberg/pull/14136) [process](https://github.com/WordPress/gutenberg/pull/14260).
+ - Update the plugin release docs to rely on a [lighter SVN checkout](https://github.com/WordPress/gutenberg/pull/14259).
+ - Add automatic generation of JavaScript API documentation for:
+ - [@wordpress/element](https://github.com/WordPress/gutenberg/pull/14269)
+ - [@wordpress/escape-html](https://github.com/WordPress/gutenberg/pull/14268)
+ - [@wordpress/html-entities](https://github.com/WordPress/gutenberg/pull/14267)
+ - [@wordpress/keycodes](https://github.com/WordPress/gutenberg/pull/14265)
+ - [@wordpress/a11y](https://github.com/WordPress/gutenberg/pull/14288)
+ - [@wordpress/blob](https://github.com/WordPress/gutenberg/pull/14286)
+ - [@wordpress/block-library](https://github.com/WordPress/gutenberg/pull/14282)
+ - [@wordpress/compose](https://github.com/WordPress/gutenberg/pull/14278)
+ - [@wordpress/dom](https://github.com/WordPress/gutenberg/pull/14273)
+ - [@wordpress/i18n](https://github.com/WordPress/gutenberg/pull/14266)
+ - [@wordpress/autop](https://github.com/WordPress/gutenberg/pull/14287)
+ - [@wordpress/dom-ready](https://github.com/WordPress/gutenberg/pull/14272)
+ - [@wordpress/block-editor](https://github.com/WordPress/gutenberg/pull/14285)
+ - [@wordpress/rich-text](https://github.com/WordPress/gutenberg/pull/14220)
+ - [@wordpress/blocks](https://github.com/WordPress/gutenberg/pull/14279)
+ - [@wordpress/deprecated](https://github.com/WordPress/gutenberg/pull/14275)
+ - [@wordpress/priority-queue](https://github.com/WordPress/gutenberg/pull/14262)
+ - [@wordpress/shortcode](https://github.com/WordPress/gutenberg/pull/14218)
+ - [@wordpress/viewport](https://github.com/WordPress/gutenberg/pull/14214)
+ - [@wordpress/url](https://github.com/WordPress/gutenberg/pull/14217)
+ - [@wordpress/redux-routine](https://github.com/WordPress/gutenberg/pull/14228)
+ - [@wordpress/date](https://github.com/WordPress/gutenberg/pull/14276)
+ - [@wordpress/block-serialization-default-parser](https://github.com/WordPress/gutenberg/pull/14280)
+ - [@wordpress/plugins](https://github.com/WordPress/gutenberg/pull/14263)
+ - [@wordpress/wordcount](https://github.com/WordPress/gutenberg/pull/14213)
+ - [@wordpress/edit-post](https://github.com/WordPress/gutenberg/pull/14271)
+ - Link to the [editor user documentation](https://github.com/WordPress/gutenberg/pull/14316) and remove the user documentation [markdown file](https://github.com/WordPress/gutenberg/pull/14318/files).
+ - Typos and tweaks: [1](https://github.com/WordPress/gutenberg/pull/14321), [2](https://github.com/WordPress/gutenberg/pull/14355), [3](https://github.com/WordPress/gutenberg/pull/14382), [4](https://github.com/WordPress/gutenberg/pull/14439), [5](https://github.com/WordPress/gutenberg/pull/14471).
+
+### Various
+
+ - Upgrade to [React 16.8.4](https://github.com/WordPress/gutenberg/pull/14400) ([React Hooks](https://github.com/WordPress/gutenberg/pull/14425)).
+ - Fix the [dependencies of the e2e-tests](https://github.com/WordPress/gutenberg/pull/14212) and the [e2e-test-utils](https://github.com/WordPress/gutenberg/pull/14374) npm packages.
+ - Avoid disabling [regeneratorRuntime in the babel config](https://github.com/WordPress/gutenberg/pull/14130) to avoid globals in npm packages.
+ - [Work](https://github.com/WordPress/gutenberg/pull/14244) [on](https://github.com/WordPress/gutenberg/pull/14247) [various](https://github.com/WordPress/gutenberg/pull/14340) [e2e tests](https://github.com/WordPress/gutenberg/pull/14219) [stability](https://github.com/WordPress/gutenberg/pull/14230) improvements.
+ - Regenerate RSS/Search block [test fixtures](https://github.com/WordPress/gutenberg/pull/14122).
+ - [Move to travis.com](https://github.com/WordPress/gutenberg/pull/14250) as a CI server.
+ - Add [clickBlockToolbarButton](https://github.com/WordPress/gutenberg/pull/14254) e2e test utility.
+ - Add e2e tests:
+ - to check the [keyboard navigation](https://github.com/WordPress/gutenberg/pull/13455) through blocks.
+ - to verify that [the default block is selected](https://github.com/WordPress/gutenberg/pull/14191) after removing all the blocks.
+ - to check the InnerBlocks [allowed blocks restrictions](https://github.com/WordPress/gutenberg/pull/14054).
+ - Add unit tests [for the isKeyboardEvent](https://github.com/WordPress/gutenberg/pull/14073) utility.
+ - Remove [CC-BY-3.0](https://github.com/WordPress/gutenberg/pull/14329) from the GPLv2 compatible licenses.
+ - Polish the @wordpress/block-editor module:
+ - Move the [block specific components](https://github.com/WordPress/gutenberg/pull/14112) to the package.
+ - [Update the classnames](https://github.com/WordPress/gutenberg/pull/14420) to follow the CSS guidelines.
+ - Update [eslint rules npm](https://github.com/WordPress/gutenberg/pull/14077) [packages](https://github.com/WordPress/gutenberg/pull/14339).
+ - Simplify the [hierarchical term selector strings](https://github.com/WordPress/gutenberg/pull/13938).
+ - Update the [Latest comments block to use the “align support config”](https://github.com/WordPress/gutenberg/pull/11411) instead of a custom implementation.
+ - Remove the [block snapshots tests](https://github.com/WordPress/gutenberg/pull/14349).
+ - Remove [post install scripts](https://github.com/WordPress/gutenberg/pull/14353) and only run these in CI to improve test performance.
+ - Tweak the plugin build zip script to [avoid prompting](https://github.com/WordPress/gutenberg/pull/14352) when the build environment is clean.
+ - Add [withRegistry](https://github.com/WordPress/gutenberg/pull/14370) higher-order component to the @wordpress/data module.
+ - Add missing [module entry point to the notices](https://github.com/WordPress/gutenberg/pull/14388) package.json.
+ - Remove the Gutenberg [5.3 deprecated functions](https://github.com/WordPress/gutenberg/pull/14380).
+ - Ensure [sourcemaps published to npm](https://github.com/WordPress/gutenberg/pull/14409) contain safe relative paths.
+ - Remove the [replace_block filter usage](https://github.com/WordPress/gutenberg/pull/13569) and extend core editor settings instead.
+ - Improve handling of [transpiled packages in unit tests](https://github.com/WordPress/gutenberg/pull/14432).
+ - Add CLI arguments to launch [e2e tests in interactive mode](https://github.com/WordPress/gutenberg/pull/14129) more easily.
+ - Select a [unique radio input](https://github.com/WordPress/gutenberg/pull/14128) in a group when using the tabbables utility.
+
+= 5.2.0 =
+
+### Enhancements
+
+- Update the [button block description](https://github.com/WordPress/gutenberg/pull/13933) wording.
+- Design and a11y [improvements for the custom color picker](https://github.com/WordPress/gutenberg/pull/13708).
+- Tweak the [FontSizePicker height](https://github.com/WordPress/gutenberg/pull/11555) to match regular select elements.
+- Improvements to the [local state persistence](https://github.com/WordPress/gutenberg/pull/13951) behavior.
+- Improvements to the [URL input popove](https://github.com/WordPress/gutenberg/pull/13973) [design](https://github.com/WordPress/gutenberg/pull/14015).
+- Disable [block navigation and document outline items](https://github.com/WordPress/gutenberg/pull/14081) in text mode.
+- Improve the [quote block icons](https://github.com/WordPress/gutenberg/pull/14091).
+- Animate the [sidebar tabs switching](https://github.com/WordPress/gutenberg/pull/13956).
+
+### Bug Fixes
+
+- Select [the last block](https://github.com/WordPress/gutenberg/pull/13294) when pasting content.
+- Fix the block validation when the [default attribute value](https://github.com/WordPress/gutenberg/pull/12757) of a block is changed.
+- Forces the [min/max value validation](https://github.com/WordPress/gutenberg/pull/12952) in the RangeControl component.
+- Display HTML properly in [the post titles](https://github.com/WordPress/gutenberg/pull/13622) of the latest posts block.
+- Fix drag and [dropping a column](https://github.com/WordPress/gutenberg/pull/13941) block on itself.
+- Fix [new lines](https://github.com/WordPress/gutenberg/pull/13799) in the preformatted block.
+- Fix [text underline shortcut](https://github.com/WordPress/gutenberg/pull/14008).
+- Fix calling [gutenberg plugin functions in the frontend](https://github.com/WordPress/gutenberg/pull/14096) context.
+- Fix [pasting a single line](https://github.com/WordPress/gutenberg/pull/14138) from Google Docs (ignoring the strong element).
+- Fix FocalPointPicker rendering [unlabelled input fields](https://github.com/WordPress/gutenberg/pull/14152).
+- Show the [images uploaded in the gallery block](https://github.com/WordPress/gutenberg/pull/12435) in the media modal.
+- Fix [wordwise selection](https://github.com/WordPress/gutenberg/pull/14184) on Windows.
+- [Preserve empty table cells](https://github.com/WordPress/gutenberg/pull/14137) when pasting content.
+- Fix [focus loss](https://github.com/WordPress/gutenberg/pull/14189) when deleting the last block.
+
+### Documentation
+
+- Add [the Block specific toolbar button](https://github.com/WordPress/gutenberg/pull/14113) sample to the format api tutorial.
+- Introduce a package to automatically generate the [API documentation](https://github.com/WordPress/gutenberg/pull/13329).
+- Tweaks: [1](https://github.com/WordPress/gutenberg/pull/13906), [2](https://github.com/WordPress/gutenberg/pull/13920), [3](https://github.com/WordPress/gutenberg/pull/13940), [4](https://github.com/WordPress/gutenberg/pull/13954), [5](https://github.com/WordPress/gutenberg/pull/13993), [6](https://github.com/WordPress/gutenberg/pull/13995), [7](https://github.com/WordPress/gutenberg/pull/14083), [8](https://github.com/WordPress/gutenberg/pull/14099), [9](https://github.com/WordPress/gutenberg/pull/14089), [10](https://github.com/WordPress/gutenberg/pull/14177).
+
+### Various
+
+- Introduce [a](https://github.com/WordPress/gutenberg/pull/14082) [generic](https://github.com/WordPress/gutenberg/pull/13088) [block](https://github.com/WordPress/gutenberg/pull/13105) [editor](https://github.com/WordPress/gutenberg/pull/14116) [module](https://github.com/WordPress/gutenberg/pull/14161).
+- Creates [an empty page](https://github.com/WordPress/gutenberg/pull/13912) that will contain the future widget screen explorations.
+- Fix [emoji in the demo content](https://github.com/WordPress/gutenberg/pull/13969).
+- Warn when the user is using an [inline element as a RichText container](https://github.com/WordPress/gutenberg/pull/13921).
+- Make Babel [import JSX pragma plugin](https://github.com/WordPress/gutenberg/pull/13809/) [aware](https://github.com/WordPress/gutenberg/pull/14106) of the createElement usage.
+- [Include the JSX pragma plugin](https://github.com/WordPress/gutenberg/pull/13540) into the default WordPress babel config.
+- Update the [non-embeddable URLs](https://github.com/WordPress/gutenberg/pull/13715) wording.
+
+### Chore
+
+- Refactoring of the [block fixtures tests](https://github.com/WordPress/gutenberg/pull/13658).
+- Refactoring the eslint [custom import lint rule](https://github.com/WordPress/gutenberg/pull/13937).
+- Refactoring the selection of [previous/next blocks actions](https://github.com/WordPress/gutenberg/pull/13924).
+- Refactoring the [post editor effects](https://github.com/WordPress/gutenberg/pull/13716) to use actions and resolvers instead.
+- Use [forEach instead of map](https://github.com/WordPress/gutenberg/pull/13953) when appropriate and enforce it with an [eslint rule](https://github.com/WordPress/gutenberg/pull/14154).
+- Remove [TinyMCE external dependency](https://github.com/WordPress/gutenberg/pull/13971) mapping.
+- Extract [webpack config](https://github.com/WordPress/gutenberg/pull/13814) into the scripts package.
+- Improve [e2e](https://github.com/WordPress/gutenberg/pull/14048) [tests](https://github.com/WordPress/gutenberg/pull/14108) stability.t
+- Avoid mutating [webpack imported config](https://github.com/WordPress/gutenberg/pull/14039).
+- [Upgrade Jest](https://github.com/WordPress/gutenberg/pull/13922) to version 24.
+- Add [repository.directory field](https://github.com/WordPress/gutenberg/pull/14059) to the npm packages and an [linting rule](https://github.com/WordPress/gutenberg/pull/14200) to enforce it.
+- Update [server blocks script to use core](https://github.com/WordPress/gutenberg/pull/14097) equivalent function.
+- Remove the [vendor scripts registration](https://github.com/WordPress/gutenberg/pull/13573).
+- Use the editor settings to pass a [mediaUpload handler](https://github.com/WordPress/gutenberg/pull/14115).
+- Remove [deprecated Gutenberg plugin functions](https://github.com/WordPress/gutenberg/pull/14090) and [features](https://github.com/WordPress/gutenberg/pull/14144) moved to core.
+- Remove unnecessary [Enzyme React 16 workarounds](https://github.com/WordPress/gutenberg/pull/14156) from the unit tests.
+- Remove [wp-editor-font stylesheet override](https://github.com/WordPress/gutenberg/pull/14176).
+- [Preserve inline scripts](https://github.com/WordPress/gutenberg/pull/13581) when overriding core scripts.
+- Support [referencing the IconButton](https://github.com/WordPress/gutenberg/pull/14163) component.
+- Refactor the [i18n setup](https://github.com/WordPress/gutenberg/pull/12559) of the Gutenberg plugin.
+
+### Mobile
+
+- Add an [image placeholder](https://github.com/WordPress/gutenberg/pull/13777) when the size is being computed.
+- Update the [image thumbnail](https://github.com/WordPress/gutenberg/pull/13764) when the image is being uploaded.
+- Support the [Format Library](https://github.com/WordPress/gutenberg/pull/12249).
+- Bottom Sheet [design](https://github.com/WordPress/gutenberg/pull/13855) [improvements](https://github.com/WordPress/gutenberg/pull/13882).
+- Update the default [block appender placehoder](https://github.com/WordPress/gutenberg/pull/13880).
+- Support [pasting content](https://github.com/WordPress/gutenberg/pull/13841) using the Gutenberg paste handler.
+- Fix [alignment issues](https://github.com/WordPress/gutenberg/pull/13945) for the appender and paragraph block placeholders.
+
+= 5.1.1 =
+
+## Bug Fixes
+
+- Fixes a [Firefox regression](https://github.com/WordPress/gutenberg/pull/13986) causing block content to be deleted.
+
+= 5.1.0 =
+
+## Features
+
+* Add a new [Search block](https://github.com/WordPress/gutenberg/pull/13583).
+* Add a new [Calendar](https://github.com/WordPress/gutenberg/pull/13772) block.
+* Add a new [Tag Cloud](https://github.com/WordPress/gutenberg/pull/7875) block.
+
+## Enhancements
+
+* Add micro-animations to the editor UI:
+ * Opening [Popovers](https://github.com/WordPress/gutenberg/pull/13617).
+ * Opening [Sidebars](https://github.com/WordPress/gutenberg/pull/13635).
+* [Restore the block movers](https://github.com/WordPress/gutenberg/pull/12758) for the floated blocks.
+* [Consistency in alignment options](https://github.com/WordPress/gutenberg/pull/9469) between archives and categories blocks.
+* Set the minimum size for [form fields on mobile](https://github.com/WordPress/gutenberg/pull/13639).
+* [Disable the block navigation](https://github.com/WordPress/gutenberg/pull/12185) in the code editor mode.
+* Consistency for the [modal styles](https://github.com/WordPress/gutenberg/pull/13669).
+* Improve the [FormToggle](https://github.com/WordPress/gutenberg/pull/12385) styling when used outside of WordPress context.
+* Use the block [icons in the media placeholders](https://github.com/WordPress/gutenberg/pull/11788).
+* Fix [rounded corners](https://github.com/WordPress/gutenberg/pull/13659) for the block svg icons.
+* Improve the [CSS specificity](https://github.com/WordPress/gutenberg/pull/13025) [of the paragraph](https://github.com/WordPress/gutenberg/pull/12998) block [styles](https://github.com/WordPress/gutenberg/pull/13821).
+* Require an initial [click on embed previews](https://github.com/WordPress/gutenberg/pull/12981) before being interactive.
+* Improve the [disabled block switcher](https://github.com/WordPress/gutenberg/pull/13721) styles.
+* [Do not split paragraph line breaks](https://github.com/WordPress/gutenberg/pull/13832) when transforming multiple paragraphs to a list.
+* Enhance the Quote block styling for [different text alignments](https://github.com/WordPress/gutenberg/pull/13248).
+* Remove the [left padding from the Quote](https://github.com/WordPress/gutenberg/pull/13846) block when it’s centered.
+* A11y:
+ * Improve the [permalink field label](https://github.com/WordPress/gutenberg/pull/12959).
+ * Improve the [region navigation](https://github.com/WordPress/gutenberg/pull/8554) styling.
+* Remove the [3 keywords limit](https://github.com/WordPress/gutenberg/pull/13848) for the block registration.
+* Add consistent background colors to the [hovered menu items](https://github.com/WordPress/gutenberg/pull/13732).
+* Allow the [editor notices to push down](https://github.com/WordPress/gutenberg/pull/13614) the content.
+* Rename the [default block styles](https://github.com/WordPress/gutenberg/pull/13670).
+
+## Bug Fixes
+
+* Fix a number of formatting issues:
+ * [Multiple formats](https://github.com/WordPress/gutenberg/issues/12973).
+ * [Flashing backgrounds](https://github.com/WordPress/gutenberg/issues/12978) when typing.
+ * [Highlighted format](https://github.com/WordPress/gutenberg/issues/11091) buttons.
+ * [Inline code](https://github.com/WordPress/gutenberg/pull/13807) with [backticks](https://github.com/WordPress/gutenberg/issues/11276).
+ * [Spaces deleted](https://github.com/WordPress/gutenberg/issues/12529) after formats.
+ * Inline [boundaries styling](https://github.com/WordPress/gutenberg/issues/11423) issues.
+ * [Touch Bar](https://github.com/WordPress/gutenberg/pull/13833) format buttons.
+* Fix a number of list block writing flow issues:
+ * Allow [line breaks](https://github.com/WordPress/gutenberg/pull/13546) in list items.
+ * [Empty items](https://github.com/WordPress/gutenberg/issues/13864) not being removed.
+ * Backspace [merging list items](https://github.com/WordPress/gutenberg/issues/12398).
+ * [Selecting formats](https://github.com/WordPress/gutenberg/issues/11741) at the beginning of list items.
+* Fix the [color picker styling](https://github.com/WordPress/gutenberg/pull/12747).
+* Set default values for the [image dimensions inputs](https://github.com/WordPress/gutenberg/pull/7687).
+* Fix [sidebar panels spacing](https://github.com/WordPress/gutenberg/pull/13181).
+* Fix [wording of the nux tip](https://github.com/WordPress/gutenberg/pull/12911) nudging about the sidebar settings.
+* Fix [the translator comments](https://github.com/WordPress/gutenberg/pull/9440) pot extraction.
+* Fix the [plugins icons](https://github.com/WordPress/gutenberg/pull/13719) color overriding.
+* Fix [conflicting notices styles](https://github.com/WordPress/gutenberg/pull/13817) when using editor styles.
+* Fix [controls recursion](https://github.com/WordPress/gutenberg/pull/13818) in the redux-routine package.
+* Fix the generic embed block when using [Giphy as provider](https://github.com/WordPress/gutenberg/pull/13825).
+* Fix the [i18n message](https://github.com/WordPress/gutenberg/pull/13830) used in the Gallery block edit button.
+* Fix the [icon size](https://github.com/WordPress/gutenberg/pull/13767) of the block switcher menu.
+* Fix the [loading state](https://github.com/WordPress/gutenberg/pull/13758) of the FlatTermSelector (tags selector).
+* Fix the [embed placeholders](https://github.com/WordPress/gutenberg/pull/13590) styling.
+* Fix incorrectly triggered [auto-saves for published posts](https://github.com/WordPress/gutenberg/pull/12624).
+* Fix [missing classname](https://github.com/WordPress/gutenberg/pull/13834) in the Latest comments block.
+* Fix [HTML in shortcodes](https://github.com/WordPress/gutenberg/pull/13609) breaking block validation.
+* Fix JavaScript errors when [typing quickly](https://github.com/WordPress/gutenberg/pull/11209) and creating undo levels.
+* Fix issue with [mover colors](https://github.com/WordPress/gutenberg/pull/13869) in dark themes.
+* Fix [internationalisation issue](https://github.com/WordPress/gutenberg/pull/13551) with permalink slugs.
+
+## Various
+
+* Implement the [inline format boundaries](https://github.com/WordPress/gutenberg/pull/13697) without relying on the DOM.
+* Introduce the [Registry Selectors](https://github.com/WordPress/gutenberg/pull/13662) in the data module.
+* Introduce the [Registry Controls](https://github.com/WordPress/gutenberg/pull/13722) in the data module.
+* Allow extending the [latest posts block query](https://github.com/WordPress/gutenberg/pull/11984) by using get_posts.
+* Extend the [range of allowed years](https://github.com/WordPress/gutenberg/pull/13602) in the DateTime component.
+* Allow [null values](https://github.com/WordPress/gutenberg/pull/12963) for the DateTime component.
+* Do not render the [FontSizePicker](https://github.com/WordPress/gutenberg/pull/13782) if [no sizes](https://github.com/WordPress/gutenberg/pull/13824) [defined](https://github.com/WordPress/gutenberg/pull/13844).
+* Add className prop support to the [UrlInput](https://github.com/WordPress/gutenberg/pull/13800) component.
+* Add [inline image resizing UI](https://github.com/WordPress/gutenberg/pull/13737).
+
+## Chore
+
+* Update [lodash](https://github.com/WordPress/gutenberg/pull/13651) and [deasync](https://github.com/WordPress/gutenberg/pull/13839) [dependencies](https://github.com/WordPress/gutenberg/pull/13876).
+* Use [addQueryArgs](https://github.com/WordPress/gutenberg/pull/13653) consistently to generate WordPress links.
+* Remove merged PHP code:
+ * jQuery to Hooks [heartbeat proxyfying](https://github.com/WordPress/gutenberg/pull/13576).
+ * References to the [classic editor](https://github.com/WordPress/gutenberg/pull/13544).
+ * [gutenberg_can_edit_post](https://github.com/WordPress/gutenberg/pull/13470) function.
+* [Disable CSS](https://github.com/WordPress/gutenberg/pull/13769) [animations](https://github.com/WordPress/gutenberg/pull/13779) in e2e tests.
+* ESLint
+ * Add a rule to ensure the [consistency](https://github.com/WordPress/gutenberg/pull/13785) [of the import groups](https://github.com/WordPress/gutenberg/pull/13757).
+ * Add a rule to protect against [invalid sprintf use](https://github.com/WordPress/gutenberg/pull/13756).
+* Remove [obsolete](https://github.com/WordPress/gutenberg/pull/13871) [CSS](https://github.com/WordPress/gutenberg/pull/13867) rules.
+* Add e2e tests for [tags creation](https://github.com/WordPress/gutenberg/pull/13129).
+* Add the [feature flags](https://github.com/WordPress/gutenberg/pull/13324) setup.
+* Implement [block editor styles](https://github.com/WordPress/gutenberg/pull/13625) using a filter.
+
+## Documentation
+
+* Add a new [tutorial about the editor notices](https://github.com/WordPress/gutenberg/pull/13703).
+* Add JavaScript [build tools](https://github.com/WordPress/gutenberg/pull/13629) [documentation](https://github.com/WordPress/gutenberg/pull/13853).
+* Enhance the block’s [edit/save documentation](https://github.com/WordPress/gutenberg/pull/13578) and code examples.
+* Use [Title Case](https://github.com/WordPress/gutenberg/pull/13714) consistently.
+* Add [e2e test utils](https://github.com/WordPress/gutenberg/pull/13856) documentation.
+* Small enhancements and typos: [1](https://github.com/WordPress/gutenberg/pull/13593), [2](https://github.com/WordPress/gutenberg/pull/13671), [3](https://github.com/WordPress/gutenberg/pull/13711), [4](https://github.com/WordPress/gutenberg/pull/13746), [5](https://github.com/WordPress/gutenberg/pull/13742), [6](https://github.com/WordPress/gutenberg/pull/13733), [7](https://github.com/WordPress/gutenberg/pull/13744), [8](https://github.com/WordPress/gutenberg/pull/13752), [9](https://github.com/WordPress/gutenberg/pull/13574), [10](https://github.com/WordPress/gutenberg/pull/13745), [11](https://github.com/WordPress/gutenberg/pull/13781), [12](https://github.com/WordPress/gutenberg/pull/13694), [13](https://github.com/WordPress/gutenberg/pull/13810), [14](https://github.com/WordPress/gutenberg/pull/13891).
+
+## Mobile
+
+* Add bottom sheet settings for the image block:
+ * [alt description](https://github.com/WordPress/gutenberg/pull/13631).
+ * [Links](https://github.com/WordPress/gutenberg/pull/13654).
+* Implement [the media upload options](https://github.com/WordPress/gutenberg/pull/13656) sheet.
+* Implementing [Clear All Settings](https://github.com/WordPress/gutenberg/pull/13753) button on Image Settings.
+* [Avoid hard-coded font family](https://github.com/WordPress/gutenberg/pull/13677) styling for the image blocks.
+* Improve [the post title](https://github.com/WordPress/gutenberg/pull/13548) [component](https://github.com/WordPress/gutenberg/pull/13874).
+* Fix the bottom sheet [styling for RTL](https://github.com/WordPress/gutenberg/pull/13815) layouts.
+* Support the [placeholder](https://github.com/WordPress/gutenberg/pull/13699) [prop](https://github.com/WordPress/gutenberg/pull/13738) in the RichText component.
+
+= 5.0.0 =
+
+### Features
+- Add a new [RSS block](https://github.com/WordPress/gutenberg/pull/7966) and follow-up improvements: [1](https://github.com/WordPress/gutenberg/pull/13501), [2](https://github.com/WordPress/gutenberg/pull/13502).
+- Add a new [Amazon Kindle embed block](https://github.com/WordPress/gutenberg/pull/13510).
+- Add a new [FocalPointPicker](https://github.com/WordPress/gutenberg/pull/10925) component and use it to define the focal point of the Cover block background.
+
+### Enhancements
+- Optimize the re-rendering performance when [inserting/removing blocks](https://github.com/WordPress/gutenberg/pull/13067).
+- Improve the [Reusable Blocks UX](https://github.com/WordPress/gutenberg/pull/12378) for contributor users.
+- Disable [embed previews](https://github.com/WordPress/gutenberg/pull/12961) for the smugmug provider.
+- Make [the fullscreen mode](https://github.com/WordPress/gutenberg/pull/13425) a desktop-only feature.
+- Accessibility: Add [speak messages](https://github.com/WordPress/gutenberg/pull/13385) when using the FeatureToggle component.
+- Accessibility: Change the inserter [search result message](https://github.com/WordPress/gutenberg/pull/13388) from assertive to polite.
+- Accessibility: Remove [duplicate aria label](https://github.com/WordPress/gutenberg/pull/12955) from menu items.
+- Remove the "[Show Download Button](https://github.com/WordPress/gutenberg/pull/13485)" toggle help text in the File block.
+- Render [the block switcher as disabled](https://github.com/WordPress/gutenberg/pull/13431) if not available in a multi-selection.
+- Use a back arrow icon to clarify the [Fullscreen mode exit button](https://github.com/WordPress/gutenberg/pull/13403).
+- Limit the [Gallery block columns count](https://github.com/WordPress/gutenberg/pull/13488) to the images count.
+- Automatically set a [default block style](https://github.com/WordPress/gutenberg/pull/12519) if missing.
+- Hide [empty categories](https://github.com/WordPress/gutenberg/pull/13549) from the Categories block in the editor.
+- Increase the padding of [the gallery captions](https://github.com/WordPress/gutenberg/pull/13623).
+- Add [left/right alignments](https://github.com/WordPress/gutenberg/pull/8814) to the latest posts block.
+- Improve the [columns margins](https://github.com/WordPress/gutenberg/pull/12199).
+- Add a [help text for the hide teaser toggle](https://github.com/WordPress/gutenberg/pull/13630) in the More block.
+- Improve the wording of the [embed block messages](https://github.com/WordPress/gutenberg/pull/13644).
+
+### Bug Fixes
+- Accessibility: Fix [the tab order](https://github.com/WordPress/gutenberg/pull/11863) of the date picker component.
+- Support [non hierarchical taxonomies](https://github.com/WordPress/gutenberg/pull/13076) in the category selector component.
+- Fix blocks [marked invalid incorrectly](https://github.com/WordPress/gutenberg/pull/13512) due to special HTML characters.
+- Fix the [Notice component styling](https://github.com/WordPress/gutenberg/pull/13371).
+- Fix the [:root selector](https://github.com/WordPress/gutenberg/pull/13325) in the editor styles.
+- Fix [duplicate block](https://github.com/WordPress/gutenberg/pull/12882) toolbars.
+- Fix [warning message](https://github.com/WordPress/gutenberg/pull/12933) when using the DateTimePicker component.
+- Fix the [File block](https://github.com/WordPress/gutenberg/pull/13432) and [Categories block](https://github.com/WordPress/gutenberg/pull/13439) style when applying custom classnames.
+- Fix the [Gallery block styling](https://github.com/WordPress/gutenberg/pull/13326) in Microsoft Edge.
+- Fix the [Button block styling](https://github.com/WordPress/gutenberg/pull/12183) when links are visited.
+- Fix Block Style [preview not dismissed](https://github.com/WordPress/gutenberg/pull/12317) after selection.
+- Fix [TabPanel buttons](https://github.com/WordPress/gutenberg/pull/11944) incorrectly submitting forms.
+- Fix [hierarchical dropdown](https://github.com/WordPress/gutenberg/pull/13567) in the Categories block.
+- Fix [wording](https://github.com/WordPress/gutenberg/pull/13479) for the color picker saturation.
+- Fix the [save keyboard shortcut](https://github.com/WordPress/gutenberg/pull/13159) while in the code editor mode.
+- Fix the [Google Docs table](https://github.com/WordPress/gutenberg/pull/13543) pasting.
+- Fix [jumps when indenting/outdenting](https://github.com/WordPress/gutenberg/pull/12941) list items.
+- Fix [FontSizePicker max width](https://github.com/WordPress/gutenberg/pull/13264) on mobile.
+- Fix PHP 5.2.2 [Parser issue](https://github.com/WordPress/gutenberg/pull/13369).
+- Fix [plural messages](https://github.com/WordPress/gutenberg/pull/13577) POT generation.
+
+### Various
+- Add [ESnext build setup](https://github.com/WordPress/gutenberg/pull/12837) and commands to the @wordpress/scripts package.
+- Add "[focus on mount](https://github.com/WordPress/gutenberg/pull/12855)" config to the DropDown component.
+- Improve [the error handling](https://github.com/WordPress/gutenberg/pull/13315) in the data module resulting in clearer messages displayed in the console.
+- Support [marking days as invalid](https://github.com/WordPress/gutenberg/pull/12962) in the DatePicker component.
+- Support [block transforms](https://github.com/WordPress/gutenberg/pull/11979) with inner blocks.
+- Improve the styles of the [editor notices with actions](https://github.com/WordPress/gutenberg/pull/13116).
+- Replace Polldaddy embed block with [Crowdsignal](https://github.com/WordPress/gutenberg/pull/12854).
+- Avoid [setting the generic Edit Post](https://github.com/WordPress/gutenberg/pull/13552) Title on load.
+- Deprecate [window._wpLoadGutenbergEditor](https://github.com/WordPress/gutenberg/pull/13547).
+- [Avoid an empty classname](https://github.com/WordPress/gutenberg/pull/11831) when deleting custom classnames.
+- Add [className prop support](https://github.com/WordPress/gutenberg/pull/13568) to the ServerSideRender component.
+
+### Documentation
+- Improve the components README files DropdownMenu & RangeControl.
+- Add code example of the [MediaPlaceholder](https://github.com/WordPress/gutenberg/pull/13389) component.
+- Add a [accessibility dedicated](https://github.com/WordPress/gutenberg/pull/13169) page.
+- Add a [Git workflow](https://github.com/WordPress/gutenberg/pull/13534) documentation page.
+- Reorganize [the contributors guide](https://github.com/WordPress/gutenberg/pull/13352).
+- Mention [the dark theme support](https://github.com/WordPress/gutenberg/pull/13375) in the design docs.
+- Enhance [the compose package](https://github.com/WordPress/gutenberg/pull/13496) [documentation](https://github.com/WordPress/gutenberg/pull/13504).
+- Expand [the block templates](https://github.com/WordPress/gutenberg/pull/13494/) code examples.
+- Fix [unregisterBlockType](https://github.com/WordPress/gutenberg/pull/13273) code examples.
+- Clarify the block styles [isDefault property](https://github.com/WordPress/gutenberg/pull/11478).
+- Move the [npm packages management](https://github.com/WordPress/gutenberg/pull/13418/) documentation to a dedicated page.
+- Add a section explaining [the links usage](https://github.com/WordPress/gutenberg/pull/13422) in the documentation.
+- Add a note about the [wp-editor dependency](https://github.com/WordPress/gutenberg/pull/12731) when using RichText.
+- Update the [isShallowEqual package](https://github.com/WordPress/gutenberg/pull/13526) documentation and tests.
+- Refresh the [repository management](https://github.com/WordPress/gutenberg/pull/13495) doc.
+- Typos: [1](https://github.com/WordPress/gutenberg/pull/13409), [2](https://github.com/WordPress/gutenberg/pull/13302), [3](https://github.com/WordPress/gutenberg/pull/13541), [4](https://github.com/WordPress/gutenberg/pull/13524), [5](https://github.com/WordPress/gutenberg/pull/13531), [6](https://github.com/WordPress/gutenberg/pull/13582), [7](https://github.com/WordPress/gutenberg/pull/13595).
+
+### Chore
+- Remove PHP Code maintained in Core and bump [minimum WordPress version](https://github.com/WordPress/gutenberg/pull/13370):
+ - [Block registration](https://github.com/WordPress/gutenberg/pull/13412).
+ - [REST API](https://github.com/WordPress/gutenberg/pull/13408) Endpoints.
+ - [Markdown](https://github.com/WordPress/gutenberg/pull/13473) support fix.
+ - Gutenberg [body classname](https://github.com/WordPress/gutenberg/pull/13572) and [responsive classname](https://github.com/WordPress/gutenberg/pull/13461).
+ - [Preloading](https://github.com/WordPress/gutenberg/pull/13453) API calls.
+ - [Block detection utilities](https://github.com/WordPress/gutenberg/pull/13467).
+ - [List screen](https://github.com/WordPress/gutenberg/pull/13459) [integration](https://github.com/WordPress/gutenberg/pull/13471).
+ - [Block content version](https://github.com/WordPress/gutenberg/pull/13469).
+ - [Block categories](https://github.com/WordPress/gutenberg/pull/13454) hook.
+ - [TinyMCE scripts](https://github.com/WordPress/gutenberg/pull/13466) registration.
+ - [Reusable blocks post type](https://github.com/WordPress/gutenberg/pull/13468) [labels](https://github.com/WordPress/gutenberg/pull/13472) and [listing page](https://github.com/WordPress/gutenberg/pull/13456).
+ - [Block Types Initialization](https://github.com/WordPress/gutenberg/pull/13457).
+ - [PHP Unit tests](https://github.com/WordPress/gutenberg/pull/13513).
+ - [Compatibility](https://github.com/WordPress/gutenberg/pull/13442) script.
+ - [Meta boxes](https://github.com/WordPress/gutenberg/pull/13449) support.
+ - [Polyfills](https://github.com/WordPress/gutenberg/pull/13536).
+ - [oEmbed Proxy](https://github.com/WordPress/gutenberg/pull/13575) Endpoint filter.
+ - [Visual Editing](https://github.com/WordPress/gutenberg/pull/13608) Disabling.
+- Update [browserlist dependency](https://github.com/WordPress/gutenberg/pull/13395).
+- New E2E tests: [Date floating for pending posts](https://github.com/WordPress/gutenberg/pull/13281).
+- New ESlint rules:
+ - Enforce ES6 [object shorthand](https://github.com/WordPress/gutenberg/pull/13400) syntax.
+ - [Declare variables](https://github.com/WordPress/gutenberg/pull/12828) only when used.
+- Use [ES5 eslint config](https://github.com/WordPress/gutenberg/pull/13428) for the is-shallow-equal package.
+- Mark the eslint config as [a root config](https://github.com/WordPress/gutenberg/pull/13483).
+- Remove [the feedback form](https://github.com/WordPress/gutenberg/pull/10705) from the plugin.
+- I18n:
+ - Use [a placeholder](https://github.com/WordPress/gutenberg/pull/13487) for the WordPress minimum version.
+ - Use [Sentence case](https://github.com/WordPress/gutenberg/pull/12239) in toolbar tooltips.
+- Add [the FontAwesome licenses](https://github.com/WordPress/gutenberg/pull/12929) to the GPL 2 compatible licenses.
+- Move the [generated spec parser](https://github.com/WordPress/gutenberg/pull/13493) to the corresponding package.
+- Refactor the [nonce apiFetch middleware](https://github.com/WordPress/gutenberg/pull/13451).
+- Refactor the list block [indent/outdent buttons](https://github.com/WordPress/gutenberg/pull/12667).
+- Fix [watching file changes](https://github.com/WordPress/gutenberg/pull/13448) on Linux.
+- Update [the question issue template](https://github.com/WordPress/gutenberg/pull/13351) in GitHub to redirect help requests.
+- Fix [wp-settings permissions](https://github.com/WordPress/gutenberg/pull/13539) in the local development environment.
+- Use a filter to [populate the demo content](https://github.com/WordPress/gutenberg/pull/13553).
+
+### Mobile
+- Improve the [hide keyboard](https://github.com/WordPress/gutenberg/pull/13415) button.
+- Add the [PostTitle](https://github.com/WordPress/gutenberg/pull/13199) component support.
+- Support [Enter key press](https://github.com/WordPress/gutenberg/pull/13500) in the post title.
+- Support [native Media Upload](https://github.com/WordPress/gutenberg/pull/13128).
+- Support [undo/redo](https://github.com/WordPress/gutenberg/pull/13514) in the post title.
+- Make the [InspectorControls](https://github.com/WordPress/gutenberg/pull/13597) available for mobile blocks.
+- Add [failed media upload](https://github.com/WordPress/gutenberg/pull/13615) support and cancel buttons.
+- Introduce the [BottomSheet](https://github.com/WordPress/gutenberg/pull/13612) [component](https://github.com/WordPress/gutenberg/pull/13633).
+
+= 4.9.0 =
+
+### Performance
+- Implement an async rendering mode for the data module updates.
+- Avoid rerendering the block components when selecting a block.
+- Improve the performance of isEditorEmptyPost selector (13% typing performance improvement).
+- Data Module: Avoid persisting unchanged values.
+- Update withSelect to use type-optimized isShallowEqual.
+- Move data selection to event handlers (called only when necessary).
+- Improve the initial rendering time by optimizing the withFilters Higher-order component.
+
+### Bug Fixes
+- Fix RichText toolbar when using multiline=”li”.
+- Correct the margin of the block icons in the inserter.
+- Fix ampersand in post tags causing editor crash.
+- Remove alignundefined class from gallery block edit markup.
+- Disable the button to open the publish sidebar if locked.
+- Correct the default margin for buttons with icons.
+- Keep the date floating when for posts with "pending" status.
+- Fix using the EXIF title when uploading images.
+- Fix font size picker on mobile.
+- Fix z-index of the Reusable Block Inserter button.
+- Fix autop behavior when a text is followed by a div.
+- Fix warning when returning null from a data module generator.
+- Announce the screen reader messages in the correct order in Safari.
+- Check Post Type support in the options modal.
+
+### Enhancements
+- Support customizing the table background colors.
+- Support underlining text using the keyboard shortcut ctrl+U.
+- Apply the editor styles to the HTML Block Preview.
+- Improve the color swatch selection indicator.
+- Improve scrolling behavior in Fullscreen Mode in Edge.
+- Remove deprecated embed providers.
+- Refactor the alignements support in the Cover Block and the Categories Block.
+- Code quality improvement to getBlockContentSchema
+- Internationalize the excerpt documentation link.
+- Improve pasting of quotes with citations.
+- A11y
+ - Add a tooltip to the block list appender.
+ - Improve the color contrast of the inserter shortcuts.
+ - Remove the label from the Warning component’s menu.
+- Add an option to overwrite the block in the Warning component.
+
+### Extensibility
+- Support custom fetch handlers for wp.apiFetch.
+- Support additional data passed to the mediaUpload utility.
+- Add filter for the preview interstitial markup.
+- Avoid appending empty query string in wp.url.addQueryArgs.
+- Dispatch heartbeat events as hook actions to avoid the jQuery dependency.
+- Support adding classnames to the plugins sidebar panels.
+- Add a className to the parent page selector.
+
+### Documentation
+- Add tutorials for
+ - Creating sidebar plugins.
+ - Using the Format API.
+ - Creating meta blocks.
+- Reorganize the tutorials page.
+- Improve the UI component documentation:
+ - The ButtonGroup component.
+ - The IconButton component.
+ - The SelectControl component.
+ - The TextareaControl component.
+ - The TabPanel component.
+ - The Toolbar component.
+ - The FormToggle component.
+- Update the Gutenberg Release and the Repository Management docs.
+- Add new section on scoping JS code.
+- Use Block Editor instead of Gutenberg in the docs.
+- Mention the Advanced Controls Panel in the design guidelines.
+- Clarify the unregisterBlockStyle documentation.
+- Clarify the difference between the button block and the button component.
+- Scope JavaScript ES5 code example.
+- Fix incorrect code example.
+- Clarify the deprecated APIs.
+- Fix typos 1 2 3 4 5 6 7.
+
+### Chore
+- Improve CI build times.
+- Extract error messages from console logging in E2E tests.
+- Reorganization of the E2E tests setup and expose it as npm packages.
+- Add aXe accessibility E2E tests support.
+- Add E2E tests for the excerpt meta box plugin.
+
+### Mobile
+- Fix the Image Size implementation.
+- Fix scrolling long text content.
+
+= 4.8.0 =
+
+### Performance
+
+ - Improve page initialization time by optimizing the addHook function and the viewport state initialization.
+ - Improve typing performance by splitting the state tree.
+ - Optimize partial application of runSelector.
+ - Move selector calls to the event handles to avoid useless component rerenders.
+ - Render DropZone children only when dragging elements over it.
+ - Initialize variables only when needed.
+
+### Enhancements
+
+ - Add error messages to the image block on upload failures.
+ - Merge similar i18n strings.
+ - Disable clipboard button in file block during upload.
+ - Persist alignment when transforming a gallery to an image and vice-versa.
+ - Copy enhancement to the embed block help text.
+ - Improve the scrolling of the WordPress navigation menu.
+
+### Bug Fixes
+
+ - Fix RTL support for the DatePicker component.
+ - Change the header level in the BlockCompare component.
+ - Show all the taxonomies in the sidebar.
+ - Fix the latest posts date className.
+ - Fix the “align center” button in Latest Posts block in the backend.
+ - Fix block height when DropCap is used.
+ - Fix converting caption shortcode with link.
+ - Fix edge case in addQueryArgs function.
+ - Don’t return the permalink if the CPT is not publicly viewable.
+ - Fix error when saving non public CPTs.
+ - Properly disable the Publish button when saving is disabled.
+
+### Various
+
+ - Show a message in the browser’s console when in Quirks Mode.
+ - Improvements to the @wordpress/scripts package: A new a check-engines command, a lint-style command and an update to lint-js.
+
+### Documentation
+
+ - Add a getting started with JavaScript tutorial.
+ - Document the blocks’ setup states in the design guidelines.
+ - Add content to Contributors index page.
+ - Improve the components documentation:
+ - The MenuItem component.
+ - The RadioControl component.
+ - The ServerSideRender component.
+ - Organise the documentation assets in a dedicated folder.
+ - Clarify immutability of the block attributes.
+ - Fix the metabox back compat code example.
+ - Fix incorrect data module example.
+ - Improve the plugin release docs.
+ - Remove useless property from the colors code example.
+ - Improve the contributing documentation.
+ - Fix npm README links.
+ - Update the design resources link.
+ - Typo fixes.
+
+### Chore
+
+ - Run e2e tests with popular plugins enabled.
+ - Add new e2e tests:
+ - The permalink panel.
+ - The categories panel.
+ - Blocks with meta attributes.
+ - Update node-sass to fix Node 11 support.
+ - Move the dev dependencies to the root package.json.
+ - Improve the Pull Request Template.
+ - More logs to the CI jobs.
+ - Code style fixes and expand the phpcs coverage.
+ - Disable fragile e2e tests.
+ - Avoid PHP notices when running the e2e tests in debug mode.
+
+### Mobile
+
+ - Make a simple version of DefaultBlockAppender.
+ - Stop using classname-to-style autotransform in react native.
+ - Fix SVG styles.
+ - Implement Enter press to add a default block.
+ - Hide keyboard when non textual block is selected.
+ - Fix undo/redo on new blocks.
+ - Pass the blockType prop to RNAztecView.
+ - Expose unregisterBlockType.
+
+= 4.7.1 =
+
+### Bug fix
+
+* Editor: Restore the block prop in the BlockListBlock filter
+
+= 4.7.0 =
+
+### Performance improvements
+
+* Optimize isViewportMatch
+* Performance: BlockListAppender: 1.7x increase on key press
+* Date: Optimize the usage of moment-timezone to save some kilobytes
+* RichText: selectionChange: bind on focus, unbind on blur
+* RichText: only replace range and nodes if different
+* Cache createBlock call in isUnmodifiedDefaultBlock
+* Edit Post: Select blocks only once multiple verified
+* RichText: Do not run valueToEditableHTML on every render
+* RichText: Reuse DOM document across calls to createEmpty
+* Only initialise TinyMCE once per instance
+* Optimize the insertion point component
+* Avoid rerending the current block if the previous block change
+* Avoid getBlock in block-list/block
+* Pass the registry argument to withDispatch to allow selectors to be used
+
+### Bug fixes
+
+* Annotations: Apply annotation className as string
+* RichText: Ensure instance is selected before setting back selection
+* Meta Boxes: Don’t hide disabled meta boxes by modifying DOM
+* Fix: Problems on Media & Text block resizing; Load wp-block-library styles before wp-edit-blocks
+* When a post is saved, check for tinymce and save any editors.
+* Fix: Undoing Image Selection from Media Library in Image Block breaks it
+* Add an end-to-end test for the HTML block
+* Fix regression when copying or cutting content in the editor
+* Fix issue where default appender has icons overlaying the text
+* Set document title for preview loading interstitial
+* Fix: Upload permissions error on end-to-end inline tokens test
+* Ensure classic block caret is in correct position after blur
+* Fix tab navigation sometimes skipping block UI
+* Improve font size picker accessibility: Use a menuitemradio role and better labels
+* Don’t show trashed reusable blocks in the editor or frontend
+* Rename functions, removing gutenberg_ prefix
+* Add block switcher end-to-end tests
+* Allow links in plugin group in the editor more menu
+* Introduce searching of block categories from slash inserter
+* Convert HTML formatting whitespace to spaces
+* Label link format with selected text, not full text
+* Ensure permalink panel is only displayed when a permalink is allowed
+* Allow the user to convert unembeddable URLs to links and try embedding again
+* Improve the top bar tools interaction and consistency
+* Fix overflowing content in the facebook embed preview screen
+* Add an action to set a category icon and correct block categories documentation
+* Fix: pasting a tag that is part of a transform and not matched ignores the content.
+* Packages: Extract Eslint config package
+* Add end-to-end test to catch revert of title during a preview after saving a draft
+* Avoid react warnings when merging two adjacent paragraphs
+* Avoid PHP notice in the recent comments block
+
+= 4.6.1 =
+
+* Parser: Make attribute parsing possessive (Fix High CPU usage).
+
+= 4.6.0 =
+
+* Fix issue with drag-and-drop in columns.
+* Fix TinyMCE list plugin registration.
+* Fix IE11 flexbox alignment when min-width is set.
+* Fix IE11 focus loss after TinyMCE init. Add IE check.
+* Fix getSelectedBlockClientId selector.
+* Fix issue where unregistering a block type would cause blocks that convert to it to break.
+* Fix Classic block not showing galleries on a grid.
+* Fix visual issues with Button block text wrap.
+* Fix modals in Edge.
+* Fix Categories block filter effect on the front-end.
+* Fix an issue where the block toolbar would cause an image to jump downwards when the wide or full - alignments were activated.
+* Apply IE11 input fix only when mounting TinyMCE.
+* Improve block preview styling.
+* Make the Image Link URL field readonly.
+* Disable HTML edit from Media & Text block.
+* Avoid loading theme editor styles if not existing (RTL languages).
+* Improve scoping of nested paragraph right-padding CSS rule.
+* Add e2e tests for the format API.
+* Merge similar text strings for i18n.
+* Move editor specific styles from style.scss to editor.scss in Cover block.
+* Simplify sidebar tabs aria-labels.
+* Remove onSplit from RichText docs.
+* Remove textdomain from the block library.
+* Avoid rendering AdminNotices compatibility component.
+* Avoid changing default wpautop priority.
+* Change @package names to WordPress.
+* Update published packages changelogs.
+
+= 4.5.1 =
+
+* Raw Handling: fix consecutive lists with one item
+* Avoid showing draft revert message on autosaves
+* Honor the Disable Visual Editor setting in the Gutenberg editor page
+* Docs: Fix dead links in CONTRIBUTING.md
+* Fix undefined index warnings in Latest Comments & Latest Posts
+* Add `react-native` module property to html-entities package.json
+* RichText: List: Sync DOM after editor command
+* Fix RichText infinte rerendering
+* Fix keycodes package missing i18n dependencies
+
+= 4.5.0 =
+
+* Add relevant attribute data from images to be used server side to handle things like theme specific responsive media.
+* In order to be able to use srcset and sizes on the front end, wp-image-### CSS class has been added to the media and text block.
+* Add minimal multi-selection block panel to replace “Coming Soon” message. It shows word and block count for the selection.
+* Exclude reusable blocks from the global block count in Document Outline.
+* Upgrade admin notices to use Notices module at runtime. It attempts to seamlessly upgrade notices output via an admin_notices or all_admin_notices action server-side.
+* Adjust the prefix transforms so that they only execute when they match text right at the caret so that they are undoable. Also makes it faster by checking if the previous character is a space.
+* Add ability to specify a different default editor font per locale.
+* Add link rel and link class settings to Image block inspector.
+* Transform an Image and Audio block to an Embed block if the URL matches an embed.
+* Respect the “Disable Visual Editor” setting per user.
+* Make it easy to access image IDs server-side on the Gallery block.
+* Recursively step through edits to track individually changed post meta in Block API. This prevents saving the default value for each registered meta when only one of them is changed.
+* Perform a complete draft save on preview.
+* Save all meta-boxes when clicking the preview button. Set preview URL only after saving is complete.
+* Disable hover interaction on mobile to improve scrolling.
+* Update the displayed permalink when the slug is cleared.
+* When converting to blocks, place unhandled HTML within an HTML block.
+* Ensure content that cannot be handled in quotes is preserved within an HTML block.
+* Localize the DateTimePicker Component.
+* Fixes the behavior of link validation including properly handling URL fragments, validating forward slashes in HTTP URLs, more strictness to match getProtocol, addressing false positives in E2E tests.
+* Fix issue where existing reusable blocks on a post would not render if the user was an author or a contributor. This happens because requests to fetch a single block or post are blocked when ?context=edit is passed and the current user is not an editor.
+* Make sure the media library collection is refreshed when a user uploads media outside of the Media Library workflow (i.e. file drops, file uploads, etc).
+* Update the editor reducer so that RESET_BLOCKS will only remove blocks that are actually in the post.
+* It used to be possible to add a reusable block inside the same reusable block in the UI, e.g. someone could create a column block inside another column block. Now it is not.
+* Deleting after certain types of selection was causing the caret to appear in the wrong place, now that it fixed, along with unexpected behavior of Ctrl+A after other kinds of selection, and the associated E2E tests updated.
+* Remove permalink-based features from non-public CPTs.
+* Address various issues with post locking modal.
+* Fix issue with duplicating blocks and undo on Top Toolbar mode.
+* Visual fix of margin on icons that are not dashicons in placeholders.
+* Visual fix for centre-aligned text on coverblocks.
+* Visual fix for embeds that are wider than the mobile breakpoint, cropping them to fit within the screen.
+* Adds MediaUploadCheck before some MediaUpload components where it was not being checked in time, creating a confusing experience for users in the “contributor” role.
+* Fix undefined variable warning in gutenberg.php.
+* Add missing stringifier and iterator in TokenList component.
+* Address i18n issue in MultiSelectionInspector.
+* Fix small visual regression with button variation preview.
+* Fix interaction regression with Sibling Inserter.
+* Fix issue with the Privacy Policy help notice.
+* Fix post visibility popover not appearing on mobile.
+* Fix issue with toolbar in IE11.
+* Fix small gap in style variation button.
+* Fix popovers position in RTL languages.
+* Fix double border issue with disabled toggle control.
+* Fix the TinyMCE init array.
+* RichText content that comes from headings content attribute should use the RichText.Content instead of rendering it directly.
+* Makes the escape key consistently exit the inline link popover – previously this could behave unexpectedly depending on focus.
+* Improve accessibility of permalink sidebar panel using external link component.
+* Display selected block outlines on Top Toolbar mode.
+* Avoid responding to componentDidUpdate in withDispatch.
+* Allow previewing changes to the post featured image.
+* Preserve unknown attributes and respect null in server attributes preparation
+* Adds missing periods to notification that another user has control of the post.
+* Restore the help modal in the Classic block.
+* Reduce specificity in core button styles to reduce conflicts with theme styles.
+* Update name of “Unified Toolbar” to “Top Toolbar” for extra clarity.
+* Make it possible to have an editor-only annotation format that stays in
+* position when typing inside RichText.
+* Adds missing periods to notification that the user does not have permission to read the blocks of the post.
+* Only add data-align for wide/full aligns if editor/theme supports them.
+* Updates jest to latest version to address vulnerabilities.
+* Removes redundant code now that TinyMCE is not being used to handle paste events.
+* Remove the gutenberg text-domain from dynamic blocks.
+* Remove redundant word from media and text block description.
+* Makes the URL for the classic editor translatable, so that the appropriate translated version can be linked to.
+* Update More block description.
+* Avoid .default on browser global assignments.
+* Mirror packages dependencies registration with core.
+* Remove absolute positions in the link popover E2E test.
+* Improve keyboard mappings in E2E tests, replacing custom utils with modifiers from the keycodes package.
+* Add missing imports on some E2E test utilities.
+* Update API Fetch documentation – removes unnecessary wp-json.
+* Remove iOS scroll adjusting now that enter behavior is more smooth.
+* Register the paragraph block as the default block.
+* Handle isSelected in plain text blocks (currently Code and More blocks).
+
+= 4.4.0 =
+
+* Improves discoverability of permalinks by adding permalink panel to the document sidebar.
+* Improves margins, column child block, and mobile display of columns.
+* Allow for programmatically removing editor document panels.
+* Replaces the uploading indicator of images and galleries with a spinner and faded out image.
+* Toolbar for floats was a little offset beyond the mobile breakpoint, now fixed.
+* Text and code editing blocks did not have width set, now set to fill the space.
+* Correctly align URL input autocomplete.
+* Improve animations: new, consistent naming convention, adds editor prefix, and moves keyframe animations (which don’t work well with mixins) into the edit post style.
+* Hover styles were showing on mobile, where hover is not available – now disabled.
+* Click and drag was incorrectly triggering a selection event in the block list under the popover, resulting in the popover dismissing. This was causing blocks to be selected when trying to set links to open in a new tab, for example. Fixed by preventing the mouse down event from propagating.
+* Adds some padding to the block inserter so that it never overlaps text in nested contexts or mobile views.
+* Better handle images larger than the editor by allowing a 2.5x buffer. Allows images inserted in TwentyNineteen and other themes that have a wider than 580px editor width, to look as expected, but prevents infinite resizing of images.
+* Stop mousedown event propagating through the toolbar, fixing problem of unexpectedly selecting blocks.
+* Improve the way that long words are broken on multiple lines, using word-break: keep-all;
+* Preserve the ratio of video backgrounds in cover blocks, videos may be cropped to fit but will keep their original ratio.
+* It was not possible to scroll a long menu on first load of Gutenberg, fixed by removing sticky-menu.
+* Properly check for allowed types of Media in Media Placeholder components.
+* “Resolve” and “Convert to HTML” buttons were not clickable (regression), now resolved.
+* Exclude HTML editing from Columns and Column blocks.
+* Better handle links without href, which were showing as `undefined`.
+* Renders block appender after the template is processed, to prevent incorrectly inserting new paragraphs.
+* Parent pages were being lost when draft pages were autosaved, fixed by removing parent pages from autosave requests and refactoring to stop using “parent” as the path argument name.
+* Adding line breaks in formatted content in quote blocks were not working correctly, fixed by persisting formats when new lines are added.
+* Prevent users in the contributor role from using blocks that require upload privileges.
+* Fix block selection in removing blocks, correct typo in comparison.
+* Japanese text (double byte characters) was not usable in the list block, fixed by changing handling of composition events.
+* Better handles different text encodings (e.g. emoji) within a block in block validation.
+* Use a query argument instead of data to prevent error being thrown on post refresh.
+* Keyboard navigation was not working as expected in Firefox, added extra key binding.
+* Adds missing alt values to images when editing.
+* Better communicate block nesting level by using unordered lists.
+* Fix sidebar icons being incorrectly announced in NVDA by adding a span with `aria-hidden=”true”`.
+* Fixes block toolbar aria label to announce “block tools toolbar” rather than “block toolbar (a11y).
+* Adjusts focus on media and text blocks to select the overall block, not the child paragraph block.
+* Refactors i18n module to replaces Jed with Tannin for significant performance improvements.
+* Replace `getSelectedBlock` and `getMultiSelectedBlocks` with more performant `getSelectedBlockClientId` and a `getBlocks` selectors in copy handler.
+* Replace `getBlock` selector in favor of the more performant `getBlockName`.
+* Replace `getSelectedBlock` with more performant `getSelectedBlockClientId` and new `isBlockValid` selectors in the BlockToolbar.
+* Replace `getSelectedBlock` with more performant `getSelectedBlockClientId` and new `isBlockValid` selectors in the Block Inspector.
+* Replaces `getInserterItems` with a new `hasInserterItems` selector which is more performant, and makes some adjustments to memorization.
+* Avoid using the `getSelectedBlock` selector in autocompleters.
+* Remove use of `getBlock` selector in the DefaultBlockAppender and EditorKeyboardShortcuts components.
+* Move undo handling out of TinyMCE and into the RichText component.
+* `is_gutenberg_page` incorrectly assumes `get_current_screen` exists, add check.
+* Brings code inline with CSS standards by switching font weight to numeric values.
+* Wrapped component would not the most up-to-date store values if it incurred a store state change during its own mount (e.g. dispatching during its own constructor), resolved by rerunning selection.
+* Display an error message if Javascript is disabled.
+* Update to React 16.6.3.
+* Adds missing components dependency for RichText.
+* Refactors list block to remove previously exposed RichText/TinyMCE logic.
+* Removes `focusOnMount` prop from NavigableToolbar components, which was generating a warning.
+* Refactor checks for upload permissions, removing unnecessary checks for store permissions.
+* Use the large image size when inserting images in both galleries and image blocks.
+* Fixes dependency of `wp-polyfill` which needs to be registered before React and React-Dom when plugins (like Yoast) rely on Gutenberg’s React.
+* Mark `onSplit` as unstable as it is pending refactor.
+* Remove 4.4 deprecated features.
+* Fix SCSS syntax error.
+* Remove export of previously removed function.
+* Add an E2E test for unsupported blocks.
+* Refactor E2E utility functions.
+* Formatting updates to copy guidelines.
+* Makes headings consistent in the dropdown documentation.
+* Removes outdated documentation referring to function support in `registerBlockType`.
+* Fixes some typos and line breaks in block design documentation.
+* Fixes some typos and improves readability of README.
+* Adds toolbar to the editing block, and edit button.
+* Passes the `isSelected` prop down to the implementation of RichText components to make them respond properly to focus changes.
+
+= 4.3.0 =
+
+* Allow toggling the core custom fields meta box.
+* Introduce Annotations API across Block and Formatting.
+* Allow using a YouTube URL (or other sources) in the Video block and transparently convert it to Embed.
+* Allow Alt+F10 keyboard shortcut to navigate to block toolbar regardless of the toolbar visibility (isTyping, etc).
+* Return focus to element that opened the post publish panel after it is closed.
+* Avoid unnecessary re-renders when navigating between blocks.
+* Improve interactions around Columns block.
+* Improve keyboard navigation through the Gallery block.
+* Use full parser in do_blocks with nested block support. This switch will allow dynamic blocks which contain nested blocks inside of them and it will pave the way for a filtering API to structurally process blocks.
+* Refactor contextual toolbar to work better with floats.
+* Auto-refresh Popovers position but only refresh if the anchor position changes.
+* Add min-width to audio block.
+* Avoid auto-saving with empty post content.
+* Display correct Taxonomy labels.
+* Fix incorrect import name.
+* Fix styling issue with checkboxes.
+* Add full set of reusable block post type labels (addresses “no blocks found” state).
+* Fix right to left block alignment.
+* Fix “updating failed” notices showing on long-open tabs.
+* Fix default PHP parser to cast inner blocks as arrays.
+* Fix JS/PHP inconsistencies with empty attributes on parsing.
+* Link to the source image in the media block.
+* Fix select all keyboard shortcut for Safari and Firefox.
+* Create multiple blocks when multiple files are drag and dropped.
+* Fixes potential theme syle.css clash.
+* Makes preview button a link (a11y).
+* Stop re-rendering all blocks on arrow navigation.
+* Add constraint tabbing to post publish panel (a11y).
+* Fix image uploading bug (incorrect JSON in apiFetch).
+* Fix taxonomy visibility for contributors.
+* Adds aria labels to images in gallery blocks during editing (a11y).
+* Formatting fix for blockquotes.
+* Hide custom fields when meta box is disabled.
+* Limits blockquote color auto-selection to solid color blocks for readability.
+* Fixes announcement on multi-selection of blocks (a11y).
+* Display upload errors in the image block.
+* Fixes selection of embed type blocks.
+* Fixes JSON attribute parsing.
+* Fixes post publish focus (a11y).
+* Resolve macOS Firefox / Safari sibling inserter behavior.
+* Fix visibility of sibling inserter on tab focus.
+* Fix issue with pasting from Word where an image would be created instead of text.
+* Fix multi-selection for float elements.
+* Fetch all tag terms, not just first 100.
+* Correctly displays media on the right.
+* Only show named image sizes.
+* Improves handling of paste action.
+* Updates displayed permalink after permalink is edited.
+* Adjust font size for contrast warning (a11y).
+* Better handles formatting – nested and Google Docs.
+* Fixes suggestion list scrolling when using keyboard (a11y).
+* Fixes block and menu navigation a11y.
+* Click to close dropdown popover.
+* Fix save lock control.
+* Timezone handling fix.
+* Improve a11y of empty text blocks.
+* Fix states for publish buttons.
+* Fix backspace behavior.
+* Change aria labels for paragraph blocks (a11y).
+* Add support for prepare RichText tree.
+* With this change we force the browser to treat the textarea for the
+* code editor as auto when handling direction for its display to preserve the ability to interact with the block delimiters.
+* Rename parentClientId to rootClientId.
+* Remove deprecated findDOMNode call from Tooltip component.
+* Remove unused ref assignment to RichText.
+* Remove redundant onClickOutside handler from Dropdown.
+* Refactor block state.
+* Remove Cloudflare warning for blocked API calls.
+* Remove _wpGutenbergCodeEditorSettings (dead code).
+* Adds periods to block a11y descriptions.
+* Refactor embed block.
+* Handle metabox warning exceptions.
+* Refactor RichText to update formatting bar on format availability changes.
+* Rename wp-polyfill-ecmascript.
+* Update translator comments for quote and pullquote.
+* Remove findDOMNode useage from NavigableToolbar.
+* Changes handling of dates to properly handling scheduling.
+* Remove findDomNode from withHoverAreas.
+* Fixes missing translator comments.
+* Refactor to import Format API components.
+* Refactor of change detection: initial edits.
+* Adds better translation comments to “resolve” and “resolve block”.
+* Adds option for blocks with child blocks to change selection behavior.
+* Allows blocks to disable being converted to reusable blocks.
+* Improve undo/redo states.
+* Updates parsing to better handle nested content.
+* Remove undefined className argument from save().
+* Use different tooltips for different alignment buttons.
+* Improve performance and handling of autosave.
+* Improve gallery upload for multiple images: load one by one.
+* Adds context variable to RichText component.
+* Avoid calling missing get_current_screen function.
+* Make cssnano remove all style comments.
+* Refactor normalizeBlockType.
+* Shows icon in block toolbar.
+* Makes kitchensink button removable from plugins.
+* Fix popover sizing on screen change (autorefresh)
+* Improvement to Columns block.
+* Update block description for consistency.
+* Refactor block styles registration.
+* Use apostrophe instead of single-quote character in strings.
+* Add transformations between video and media and text block.
+* Version update for NPM packages.
+* Update Lerna to latest version.
+* Validates link format in RichText.
+* Refactor contextual toolbar to work better with floats.
+* Move wp-polyfill-ecmascript override to scripts registration.
+* Improves consistency of parser tests.
+* Remove code coverage.
+* Adds mocking helpers for E2E tests.
+* Runs E2E tests with the user in author role.
+* Adds tests for Format API.
+* Adds E2E test for rapid enter presses.
+* Fix typo in documentation.
+* Fix typos in block API documentation.
+* Improved documentation and examples for withFilters.
+* Fix some broken links in documentation.
+* Fix typo and quote consistency.
+* Remove duplicated word.
+* Adds custom block icon instructions.
+* Update documentation on keyboard shortcuts.
+* Updates isSelectionEnabledDocumentation.
+* Update FontSizePicker component documentation.
+* Export `switchToBlockType` function.
+* Remove mobile RN test suite (temporary measure).
+* Improve styling of next page block.
+* Removes fixed cover on iOS (unsupported in mobile Safari).
+* Adds support for native media picker.
+* Remove onChange delay.
+* Exposes slot/fill pattern to mobile.
+* Expose @wordpress/editor to mobile.
+* Refreshes native post block merge.
+* Properly handle cancel on the media picker.
+
+= 4.2.0 =
+
+* Introduce the Formatting API for extending RichText.
+* Use default Inserter for sibling block insertion.
+* Support adding and updating entities in data module.
+* Update block descriptions for added clarity and consistency.
+* Add support for displaying icons in new block categories.
+* Append registered toolbar buttons in RichText.
+* Optimize SlotFill rendering to avoid props destructuring.
+* Optimize Inserter props generation and reconciliation.
+* Improve writing flow by unsetting typing flag if Escape pressed.
+* Add support for non-Latin inputs in slash autocomplete block inserter.
+* Use an animated WP logo for preview screen.
+* Add “img” as a keyword for the Image block.
+* Delay TinyMCE initialisation to focus.
+* Announce number of filtered results from block inserter to screen readers.
+* Add audible feedback for link editing.
+* Avoid focus loss on active tab change within the Sidebar.
+* Add Alt + F10 (navigate to the nearest toolbar) to the shortcut docs and modal.
+* Add some more URL helpers to the url package.
+* Add has-dates class to Latest Posts block if applicable.
+* Improve mobile display of “options” modal.
+* Add “link target” option in Image block.
+* Use currentcolor as border-color for outline button style.
+* Introduce a new middleware to the api-fetch package which adds ?_locale=user to every REST API request.
+* Refactor and optimize withSelect, withDispatch handling of registry change.
+* Refactor and update DropZone context API.
+* Rephrase description of responsive toggle.
+* Ensure buttons on end of row in media-placeholder have no margin on the right.
+* Include implicit core styles in SelectControl.
+* Use better help text for ALT text input.
+* Flatten Inserter mapSelectToProps to optimize rendering.
+* Cleanup Embed code and add better test coverage.
+* Add space above exit code editor button.
+* Return 0 in WordCount if text is empty.
+* Avoid setting a value on the File block download attribute.
+* Set download attribute on File block as empty.
+* Remove Cover block ‘strong’ style.
+* Reduce frequency of actions updating isCaretWithinFormattedText.
+* Add a function to unregister a block style variation.
+* Add lodash deburr to autocomplete so that is works with diacritics.
+* Avoid making WordPress post embeds responsive.
+* Improve handling of centered 1-column galleries with small images.
+* Make pre-publish prompts more generic.
+* Improve the style variation control aria-label.
+* Improve preloading request code.
+* Add missing context to various i18n strings.
+* Add post saving lock APIs so plugins can add and remove locks.
+* Take the viewport size into account when it comes to decide whether to show the button or toggle logic for “submit for review”.
+* Improve accessibility of settings sidebar tabs.
+* Improve the header toolbar aria-label.
+* Add styles to stop Classic block buttons from inheriting italics from themes.
+* Add aria-label to links that open in new windows.
+* Add more descriptive aria-labels for the open and closed states of sidebar settings.
+* Add key event handler to activate block styles with keyboard.
+* Add field that allows changing image alt text from the sidebar in Media & Text.
+* Add aria-label to describe action of featured image update button.
+* Restore displaying formatting shortcuts in toolbar.
+* Add i18n context to “Resolve” button for invalid blocks.
+* Update the editor styles wrapper to avoid specificity issues.
+* Fix converting a reusable block with nested blocks into a static block.
+* Fix regression with mobile toolbar spacing.
+* Fix size regression in block icon.
+* Fix multi-selected warning block highlight.
+* Fix: Show resizer on “Media & Text” block on unified toolbar mode
+* Fix some RichText shortcuts and add e2e tests.
+* Fix issue with tertiary button hit areas.
+* Fix issue with unified toolbar not always fitting in smaller viewports.
+* Fix issue with “remove tag” button in long tag names.
+* Fix rich text value for nested lists.
+* Use color function for defining the background in DateTimePicker.
+* Fix usage of preg_quote() in block parsing.
+* Fix flow of scheduling and then publishing.
+* Fix focus issue on Gallery remove button.
+* Fix keyboard interaction (up/down arrow keys) causing focus to transfer out of the default block’s insertion menu.
+* Fix regression causing dynamic blocks not rendering in the frontend.
+* Fix vertical alignment issue on Media & Text block.
+* Fix some linter errors in master branch.
+* Fix dash line in More/Next-Page blocks.
+* Fix missing Categories block label.
+* Fix embedding and demo tests.
+* Fix issue with vanilla stylesheet.
+* Fix documentation for openModal() and closeModal().
+* Fix blocks navigation menu SVG icon size.
+* Fix link popover keyboard accessibility.
+* Fix issue with multiselect using shift + arrow.
+* Fix issue with format placeholder.
+* Fix Safari issue where hover outlines sometimes linger.
+* Resolve an issue where the “Copy Post Text” button in the error boundary would not actually copy post text, since it used a legacy retrieval method for post content.
+* Make preview placeholder text translatable.
+* Load translations in the reusable block listing page.
+* Avoid adding isDirty prop to DOM.
+* Improve translation string and replace placeholder handling for MediaPlaceholder instructions.
+* Refactor rich text package to avoid using blocks packages as a dependency.
+* Handle 204 response code in API Fetch.
+* Remove HTML source string normalization.
+* Normalize function arguments in Block API.
+* Remove unused code path.
+* Deprecate layout attribute.
+* Add class for -dropdown/-list in Archives block.
+* Update registration method signature of RichText.
+* Add filter for preloading API paths.
+* Add missing @return tag to gutenberg_meta_box_save_redirect() function.
+* Rename id attribute to tipId in DotTip.
+* Only silence REST errors if the REST server is present
+* Use consistent help text in DatePicker.
+* Export both the DropZone and MediaPlaceholder editor components with the withFilters HOC.
+* Remove “half” keyword from Media & Text block.
+* Remove redundant hooks initialization.
+* Mark getSettings in Date package as experimental.
+* Remove unused variable fallbacks in RichText.
+* Improve the Toggle Control elements DOM order for better accessibility.
+* Mark Reusable blocks API as experimental pending future refactor.
+* Set correct media type for video poster image and manage focus properly.
+* Avoid PHP notices due to non-available meta boxes.
+* Implement fetchAllMiddleware to handle per_page=-1 through pagination in wp.apiFetch.
+* Add do’s and don’ts to block design documentation.
+* Update creating-dynamic-blocks.md.
+* Update editor package changelog.
+* Add notices package.
+* Add styles property to block-api.md.
+* Add documentation for responsive-embeds theme option.
+* Add missing e2e tests for Plugins API.
+* Add an eslint rule to use cross-environment SVG primitives.
+* Use turbo-combine-reducers in place of Redux
+* Update react-click-outside to 3.0.
+* Update @wordpress/hooks README to include namespace mention.
+* Fix Heading blocks validation errors after block splitting
+* Expose setUnregisteredTypeHandlerName / getUnregisteredTypeHandlerName for mobile.
+* Fix a refresh issue with iOS when splitting blocks.
+* Simplify onEnter handling.
+* Hook onBackSpace in RichText component.
+* Introduce the ability to merge two blocks together on Backspace.
+* Properly refresh blocks when merging them under iOS.
+* Port nextpage block to the ReactNative mobile app.
+* RichText: fix buggy enter/delete behaviour (Extra br elements).
+* Fix showing categories for contributors.
+
+= 4.1.1 =
+
+* Fix dynamic blocks not rendering in the frontend when meta-boxes present.
+
+= 4.1.0 =
+
+* Implement a block navigation system that allows selecting child or parent blocks within nested blocks (like folder path traversal) as well as functioning as a general fast navigation system when a root block is selected.
+* Add a Media & Text block that can facilitate the creation of split column content and allows the split to be resizable.
+* Show block style selector in the block inspector.
+* Rename Cover Image to just Cover and add support for video backgrounds.
+* Add a new accessible Date Picker. This was months in the works.
+* Reimplement the Color Picker component to greatly improve keyboard navigation and screenreader operations.
+* Add style variation for Table block with stripe design.
+* Add “Options” modal to toggle on/off the different document panels.
+* Allow toggling visibility of registered meta-boxes from the “Options” modal.
+* Handle cases where a block is on the page but the block is not registered by showing a dialog with the available options.
+* Ensure compatibility with WordPress 5.0.
+* When pasting single lines of text, treat them as inline text.
+* Add ability to insert images from URL directly in the Image block.
+* Make Columns block responsive.
+* Make responsive embeds a theme option.
+* Add direction attribute / LTR button to the Paragraph block.
+* Display accurate updated and publish notices based on post type.
+* Update buttons in the editor header area to improve consistency (save, revert to draft, etc).
+* Avoid horizontal writing flow navigation in native inputs.
+* Move toggle buttons to the left of their control handle.
+* Add explicit bottom margin to figure elements (like image and embed).
+* Allow transforming a Pullquote to a Quote and viceversa.
+* Allow block inserter to search for blocks by typing their category.
+* Add a label to the URL field in the Publishing Flow panel.
+* Use the stored date format in settings for the LatestPosts block.
+* Remove the placeholder text and use visible label instead in TokenField.
+* Add translator comment for “View” menu label.
+* Make YouTube embed classes consistent between front-end and back-end.
+* Take into account citation when transforming a Quote to a Paragraph.
+* Restore ⌘A’s “select all blocks” behaviour.
+* Allow themes to disable custom font size functionality.
+* Make missing custom font sizes labels translatable.
+* Ensure cite is string when merging quote.
+* Defer fetching non-hierarchical terms in FlatTermSelector.
+* Move the theme support data previously exposed at the REST API index into a read-only theme controller for the active theme.
+* Detect oEmbed responses where the oEmbed provider is missing.
+* Use “Save as Pending” when the Pending checkbox is active.
+* Use the post type’s REST controller class as autosave parent controller.
+* Use post type labels in PostFeaturedImage component.
+* Enforce text color within inline boundaries to ensure contrast and legibility.
+* Add self-closing tag support (like path element) when comparing HTML.
+* Make sure autocomplete triggers are regex safe.
+* Silence PHP errors on REST API responses.
+* Show permalink label as bold text.
+* Change the block renderer controller endpoint and namespace from /gutenberg/v1/block-renderer/ to /wp/v2/block-renderer/.
+* Hide “edit image” toolbar buttons when no image is selected.
+* Hide “Add to Reusable Blocks” action when ‘core/block’ is disabled.
+* Handle blocks passing null as RichText value.
+* Improve validation for attribute names in rich-text toHTMLString.
+* Allow to globally overwrite defined colors in PanelColorSettings.
+* Fix regressions with Button block preview display.
+* Fix issue with color picker not appearing on mobile.
+* Fix publish buttons with long text.
+* Fix link to manifest file in contributing file.
+* Fix demo content crash on malformed URL.
+* Fix issue in docs manifest.
+* Fix media caption processing with the new RichText structure.
+* Fix problem with Gallery losing assigned columns when alignments are applied.
+* Fix an issue where the Categories block would always use the center class alignment regardless of what was set.
+* Fix scroll issue on small viewports.
+* Fix formatting in getEditorSettings docs and update getTokenSettings docs.
+* Fix padding in block validation modal.
+* Fix extra instances of old rich text value source.
+* Fix issue with adding links from the auto-completer.
+* Fix outdated docs for RichText.
+* Fix pre-publish panel overflow issue.
+* Fix missing styles for medium and huge font size classes.
+* Fix autocomplete keyboard navigation in link popover.
+* Fix a text selection exception in Safari.
+* Fix WordPress embed URL resolution and embeds as reusable blocks.
+* Avoid triggering a redirect when creating a new Table block.
+* Only use rich text value internally to the RichText component.
+* Ensure multiline prop is either “p” or “li” in RichText.
+* Do not use dangerouslySetInnerHTML with i18n string.
+* Account for null value in redux-routine createRuntime.
+* Extract link container from RichText.
+* Allow default_title, default_content, and default_excerpt filters to function as expected.
+* Replace gutenberg in classNames with block-editor.
+* Restore the order of actions usually fired in edit-form-advanced.php.
+* Update REST Search controller to use ‘wp/v2’ namespace.
+* Improve keyboard shortcuts section in FAQ.
+* Change all occurrences of ‘new window’ to ‘new tab’.
+* Conditionally load PHP classes in preparation for inclusion in core.
+* Update rich-text source mentions in docs.
+* Deprecate PanelColor components.
+* Use mock response for demo test if Vimeo is down.
+* Adding a bit more verbosity to the install script instructions.
+* Document isDefault option for block styles.
+* Update docs for new REST API namespace.
+* Update shortcut docs with new block navigation menu shortcut.
+* Further improve Release docs.
+* Updated custom icon documentation links.
+* Add all available script handles to documentation.
+* Add wp-polyfill to scripts.md.
+* Add e2e tests for List and Quote transformations.
+* Fail CI build if local changes exist.
+* Attempt to always use the latest version of nvm.
+* Add bare handling for lint-js script.
+* Add support for Webpack bundle analyzer.
+* Improve setup of Lerna.
+* Update clipboard dependency to at least 2.0.1.
+* Recreate the demo content post as an e2e test using keyboard commands.
+* Add mobile SVG compatibility for SVG block icons.
+* Fix className style in SVG primitive.
+* Split Paragraph and Heading blocks on enter.KEY. Refactor block splitting code on paragraph and heading blocks.
+* Add caption support for image block.
+* Rename PHP functions to prevent conflict with core
+* Fix some typos
+* Improve the Toggle Control elements DOM order for better accessibility
+* Set correct media type for video poster image and manage focus properly.
+* Implement fetchAllMiddleware to handle per_page=-1 through pagination in wp.apiFetch
+* Fix Slash autocomplete: Support non-Latin inputs
+* Add WordPress logo animation for preview
+
+= 4.0.0 =
+
+### New Features
+* Add ability to change overlay color in Cover Image.
+* Introduce new Font Size Picker with clear labels and size comparison.
+* Introduce new RichText data structure to allow better manipulation of inline content.
+* Add Pullquote style variation and color palette support.
+* Add support for post locking when multiple authors interact with the editor.
+* Add an alternative block appender when the container doesn’t support the default block (paragraph).
+* Improve the UI and interactions around floats.
+* Add option to skip PublishSidebar on publishing.
+* Add support for shortcode embeds that enqueue scripts.
+* Add a button to exit the Code Editor.
+* Introduce a reusable ResizableBox component.
+* Style nested `
`s with circles instead of normal bullets.
+* Show hierarchical terms sorted by name and allow them to be filterable through search. Hide the filter box if there are fewer than 8 terms.
+* Improve messaging around invalid block detection.
+* Use text color for links when a paragraph has a color applied.
+* Allow extended usage of the controls API in resolvers within data layer.
+* Ensure that a default block is inserted (and selected) when all other blocks are removed.
+* Enhance the block parser to support multiple type, in accordance with JSON schema.
+* Add a larger target area for resize drag handles.
+* Add media button to classic block.
+* Add control to toggle responsive mechanism on embed blocks.
+* Update sidebar design to have a lighter feeling.
+* Update resolvers in data layer to rely on controls instead of async generators.
+* Set template validity on block reset.
+* Remove dirty detection from Meta Boxes to reduce false positives of “unsaved changes”.
+* Show “Publish: Immediately” for new drafts by inferring floating date.
+* Add a slight transition to Full Screen mode.
+* Improve spacing setup in Gallery Block.
+* Remove additional side padding from blocks.
+* Improve the reusable blocks “Export as JSON” link.
+* Enforce a default block icon size to allow flex alignment and fix unaligned labels.
+* Consider single unmodified default block as empty content.
+* Only display URL input field when “Link To” is set for Image Block.
+* Make backspace behavior consistent among Quote, Verse and Preformatted.
+* Expose refresh method from Dropdown component.
+* Omit style tags when pasting.
+* Use best fitting embed aspect ratio if exact match doesn’t exist.
+* Avoid dispatching undefined results in promise middleware.
+* Change keyboard shortcut for removing a block to access + z.
+* Replace the Full Screen mode “x” icon with a back arrow.
+* Make drag handle visible on hover while in nested contexts.
+* Pass the tab title to the TabPanel component for situations where it may need to be highlighted.
+* Allow setting no alignment when a default alignment exists.
+* Improve title and appender margin fix.
+* Avoid focusing on the close button on modal and try a modal appear animation.
+* Change the URL Input label to match Classic.
+* Adjust media upload source for RichText.
+* Handle edge cases in with-constrained-tabbing and add tests.
+* Set a consistent input field width in media placeholders.
+* Add a hover state to sidebar panel headers.
+* Change settings title from “Writing” to “View”.
+* Convert the “tools” menu group into internal plugin.
+* Normalize data types and fix default implementation in parser.
+* Cleanup CSS specificity issues on Button component for portability.
+* Display error when attempting to embed URLs that can’t be embedded and don’t generate a fallback.
+* Update some edit and save button labels and styles for consistency.
+* Make “Manage Reusable Blocks” a link instead of an icon button.
+
+### Bug Fixes
+* Fix issue with Enter and the Read More block.
+* Fix menu item hover colors.
+* Fix issue with editor styles and fullscreen mode.
+* Fix popover link repositioning.
+* Fix Space Block layout issues on small screens.
+* Fix custom classNames for dynamic blocks.
+* Fix spacing of post-publish close button in other languages.
+* Fix Async Generator resolvers resolution.
+* Fix issue with Spacer Block not being resizable when using unified toolbar and spotlight mode.
+* Fix grammar.md manifest entry and update data docs.
+* Fix issue with region focus on the header area on IE11.
+* Fix reusable block broken button dimensions on IE11.
+* Fix issues with dropping blocks after dragging when calculating new block index.
+* Fix InnerBlock templates sync conditions to avoid a forced locking.
+* Fix typo in @wordpress/api-fetch README.md.
+* Fix regression with Button Block placeholder text.
+* Fix dropzone issue in Edge (event.dataTransfer.types not being an array).
+* Fix documentation for registerBlockStyle arguments and clarify getSaveElement filter.
+* Fix raw transforms not working in Edge when pasting content.
+* Fix a regression where wide images would cause horizontal scrollbars.
+* Fix issue with gallery margin while typing a caption.
+* Fix Block alignment CSS rules affecting nested blocks.
+* Fix CSS issue with nested paragraph placeholder.
+* Fix links in docs and add documentation for isPublishSidebarEnabled.
+* Fix shortcode package dependencies.
+* Fix overscroll issues locking scroll up on long pages.
+* Fix reference to SVG component in docs.
+* Fix Table Block header and body column misalignment.
+* Fix an issue where inserting like breaks would throw an error.
+* Fix regressions with placeholder text color (Cover Image, captions).
+* Fix Editor Styles regression.
+* Fix faulty Jed state after setLocaleData.
+* Fix small line-height issue in editor style.
+* Fix Pullquote margin regressions.
+* Fix issues with File Block and new RichText structures.
+* Fix Writing Flow E2E test.
+* Fix issues with “tips” popup margins.
+* Fix issue with mentions after rich text value merge.
+* Fix clipping issue with Instagram embed.
+* Fix ESNext example code.
+* Fix usage of tabs / spaces in parser code.
+* Fix Classic Block toolbar regression.
+* Fix issues with Table Block alignments.
+* Fix inserter misalignment regression.
+
+### Other Changes
+* Minor i18n fixes after deprecations were removed.
+* Rename parameter from mapStateToProps to mapSelectToProps in withSelect.
+* Rename AccessibleSVG to SVG and make it work with React Native.
+* Change createObjectUrl to createBlobURL.
+* Clean up Sass variables, comments, reduce complexity.
+* Move Classic Block to packages.
+* Move HTML Block into the blocks library package.
+* Move embed scripts into the body in preview documents.
+* Ensure that the return value of apiFetch is always a valid Promise object in Firefox.
+* Allow negative numbers in order field for Page Attributes.
+* Make sure the demo page loads without marking itself as having changes.
+* Refactor MediaUpload, MediaPlaceholder, and mediaUpload to support arrays with multiple supported types.
+* Add new icons to dashicons package.
+* Add link to “add_theme_support” docs.
+* Remove glob and just include necessary files.
+* Remove unused isButton prop.
+* Remove Vine embed.
+* Replace length check with RichText.isEmpty in Image Block.
+* Replace TinyMCE function to decode entities with existing Gutenberg package.
+* Extract the edit-post module as a reusable package.
+* Pass editor initial settings as direct argument.
+* Pass feature image ID to media upload component.
+* Pass all available properties in the media object.
+* Replace element-closest with registered vendor script.
+* Add new handbook introduction and docs about “blocks as the interface”.
+* Add utils to the wp-data script dependencies.
+* Disable alternate diff drivers in setup script.
+* Clarify RichText.Content readme docs.
+* Document `isDefault` option for block styles.
+* Update Panel component documentation.
+* Update full post content test fixtures.
+* Add ESLint rule about not allowing string literals in IDs.
+* Add a test for the new Code → Preformatted transform and use snapshots.
+* Add E2E test to visit demo page and verify errors.
+* Add E2E tests for list creation.
+* Update Redux to the latest version.
+
+### Mobile
+* Add the React Native entry point to more packages.
+* Need to define isRichTextValueEmpty for mobile.
+* Have Travis run mobile tests that use the parent code.
+* Wire onEnter to requestHTMLWithCursor command in RichText.
+
+= 3.9.0 =
+
+* 🏗 Add support for creating reusable blocks out of multi-selected groups of blocks not just individual blocks. This means the ability to easily save templates out of an existing set of blocks.
+* 🚀 Add support for importing and exporting reusable blocks (using a JSON file transport). Note that locality of resources can be a problem if importing on a separate WordPress site.
+* 🔍 Allow to visually show differences between conversion options when a block is detected as invalid.
+* Add a clear drag handle next to the block arrow controls to drag and move a block. Also further polishes the drag and drop experience.
+* Instrument collapsible groups for the block toolbar. It allows to display groups of options as a dropdown and reduce the length and imposition of the toolbar as a whole.
+* Allow conversion from Cover Image to Image and back, using caption if it exists as the main text.
+* Move the reusable block UI options to the top of the block or block group.
+* Focus the title when loading the editor if it’s empty.
+* Adjust margin rules for nested blocks.
+* Preserve aspect ratio on embedded content at different alignments and widths.
+* Unselect blocks and disable inserter when switching to Code Editor.
+* Add new default block icon (used when no icon is defined).
+* Avoid showing stacked icon group on parent blocks if all of its children are meant to be hidden from the inserter.
+* Add dark editor style support.
+* Add a figure wrapper to Pullquote block.
+* Add needed attributes to kses allowed tags for the Gallery block.
+* Improve visual display of Classic block toolbar.
+* Adjust unified block toolbar padding at medium breakpoints.
+* Better align the close, chevrons, and ellipsis icons in the sidebar panel.
+* Improve cropping of galleries in IE11.
+* Adjust gallery caption flex alignment.
+* Include Caption Styles in Video Block.
+* Update RichText usage to avoid inline elements.
+* Add shortcut aria label for unreadable shortcuts.
+* Avoid triggering invalid block mechanisms on empty HTML content.
+* Rename the Speaker block to Speaker Deck.
+* Disable inserter on Column block and avoid showing stacked icon on columns.
+* Send post_id to the REST API in the ServerSideRender component within the editor. This ensures the global $post object is set properly.
+* Use pseudo element to prevent inspector tab width from changing when selected.
+* Apply consistent spacing on the post visibility menu.
+* Fix notice styling regression.
+* Fix ability to select small table cells.
+* Fix issue with drag and drop in Chrome when the document has iframes.
+* Fix HTML validation issues.
+* Fix margin style regression with block appender.
+* Fix link source for outreach/articles.
+* Fix Archives block alignment and issue with custom classes.
+* Fix error when a taxonomy has no attached post type.
+* Fix invalid block scrim overflowing toolbar on mobile.
+* Fix block settings menu appearance in non wp-admin contexts.
+* Fix incorrect unlink shortcut.
+* Fix placeholder text contrast.
+* Fix issue with shortcut inserter on invalid paragraphs.
+* Fix camelCase and cross-component class name.
+* Fix qs dependency typo.
+* Pluralize “kind” to fix typo.
+* Remove isButton prop.
+* Remove wrapper div from Categories block.
+* Remove prop-type-like check in Popover component.
+* Remove unnecessary duplicated class from Embed placeholder.
+* Flatten BlockListLayout into base BlockList.
+* Add isEmptyElement utility function under wp.Element.
+* Use HTML Document for finding iframe in embed previews.
+* Add wp-polyfill as central polyfill.
+* Update docke-compose setup order to create MySQL container before WordPress container.
+* Improve comments in transforms object of Quote block.
+* Do not assume that singular form in _n() is used just for single item.
+* Update examples for components to look according to guidelines.
+* Update release docs to include process for RC.
+* Add simplified block grammar spec to the handbook.
+* Add lint rule for path on Lodash property functions.
+* Add user for cli image in docker-compose.
+* Show lint errors when there are lint problems.
+* Minor updates and improvements to documents and code references.
+* Improve docs build to consider memoized selectors.
+* Add Heading toolbar for changing heading sizes.
+* Save level to heading block attributes for parsing.
+* Add onEnter callback and function placeholder to RichText implementation.
+* Add Image block placeholder.
+* Avoid propagating eventCount to components.
+* Parser: Output freeform content before void blocks.
+* Fix export block as JSON in IE11 and Firefox.
+* Update demo content to avoid invalidations or automated post updates.
+
+= 3.8.0 =
+
+* Add Full Screen mode. 📺
+* Add UI for bulk managing reusable blocks.
+* Implement a more sophisticated Editor Styles mechanism. 🖍 It allows themes to register editor styles for blocks by targeting the blocks themselves without having to fight CSS specificity, and without having to know the internal DOM structure for the editor.
+* Move the block settings menu to the block toolbar, further consolidating the UI elements.
+* Switch to a new hand-coded default block parser implementation and expand documentation.
+* - Implemented in both PHP and JS.
+* - Brings great performance improvements in both time and memory.
+* - Makes server-side parsing in PHP viable for accessing blocks as a tree.
+* Use flex-box to render the block inserter layout to address different issues with spacing.
+* Show a warning when a disallowed filetype is dropped on a MediaUpload.
+* Show "no archives to show" message on Archives Block.
+* Add AccessibleSVG component and use consistently for block icons.
+* Improve Classic editor and Cloudflare notification modals.
+* Refactor Draggable component to decouple the drag handle from the DOM node being dragged.
+* Move video caption styles to style.scss.
+* Treat Verse lines consistently on the front-end.
+* Make sure all available taxonomies are loaded in the editor.
+* Improve empty elements filters in Slot implementation.
+* Fix case with PostTextEditor where intended state value is not always reflected in the rendered textarea when empty.
+* Fix background clashing with some themes in Separator alternative styles.
+* Fix case where hasSelectedInnerBlock did not account for multi-selected innerBlocks. This caused an edge case in Spotlight mode where multiple blocks selected inside a column would appear unfocused.
+* Fix regression with margins around image captions.
+* Fix issue with author select overflowing on IE11.
+* Fix the publish panel top position in FullScreen mode.
+* Fix radio button alignment in post visibility menu.
+* Fix issues with centering of images.
+* Fix BlockIcon usage in embed placeholder when resource cannot be previewed.
+* Fix font size regression in PostTitle.
+* Fix codetabs block in extensibility documentation.
+* Fix import source of RangeControl in Readme file.
+* Fix broken link in documentation inside element/README.md.
+* Deprecate usage of RichText provider component.
+* Deprecate getI18n, dcnpgettext.
+* Remove deprecated selectors from docs.
+* Revert shortcut change in block-deletion e2e test.
+* Pin fetch polyfill to 3.0 UMD distributable to resolve an issue where it was no longer usable in IE11.
+* Ensure Gutenberg repository is clean after install.
+* Include block serialization default parser in plugin.
+* Change how required built-ins are polyfilled with Babel 7.
+
+= 3.7.0 =
+
+* New “Spotlight Mode” that focuses on a single block at a time and an updated “Unified Toolbar” design. Both can be combined.
+* Refactor to how image floats are handled.
+* Improve visual clarity of block switcher menu.
+* Add a delay to the block type label when hovering.
+* Allow converting a multiline-paragraph into a list with corresponding items.
+* Position caret at end of previous block for any type of block removal.
+* Automatically create an Audio block when drag-and-dropping an audio file.
+* Update icons used for Paragraph, Heading, and Subheading blocks for added clarity.
+* Adhere to OS guidelines when showing keyboard shortcuts (icons for Mac).
+* Improve link insertion by continuing to show highlighted text when URL input is toggled.
+* Automatically create a link when selected text is a URL.
+* Expand on capabilities of invalid block actions by adding an ellipsis menu and an option to convert to classic block.
+* Ignore leading slash when searching blocks in the inserter.
+* Pass the title attribute when uploading an image.
+* Allow blocks which support alignments to have a default option.
+* Add poster image support for Video Block.
+* Add support for preload attribute in Video Block.
+* Add description for Reusable Blocks, show in the inspector.
+* Update Heading Block description for clarity.
+* Small design update to the editor fixed toolbar.
+* Improve visual display of post visibility settings.
+* Apply enhancements to the coloring mechanism and the exposed components (withColors).
+* Only show transforms for blocks that can be inserted on the root block. Also orders them by frequency / use.
+* Remove margin-bottom from the last element on panel body.
+* Store and restore the global post object around dynamic block callbacks to allow for loops.
+* Move first editor tip about inserter to the toolbar.
+* Use double quotes in all NUX tips.
+* Use sentence case for text in Tooltips.
+* Only request embed preview if there is a URL.
+* Change keyboard shortcut for remove block to Cmd+Shift+X / Ctrl+Shift+X.
+* Reset value of RangeControl when setting it to empty.
+* Add Text Columns → Columns transform.
+* Add Code → Preformatted transform.
+* Add “blockquote” as a keyword for the Quote block.
+* Clear the floating element for clearing color values. Update the appearance so that it’s consistent with other button settings.
+* Rewrite Table Block to use a simpler RichText value.
+* Add RichText.isEmpty API.
+* Allow disabling Google Fonts URL by translators.
+* Refactor post format block implementation to assign as template setting.
+* Improve settings consistency of blocks under widget category.
+* Fix issue where pasting malformed HTML into a block the HTML tokenizer could break by wrapping it with an exception handler.
+* Restore option to add links within a Verse Block.
+* Fix excess whitespace in block style class name.
+* Fix issue where hit-area for the inserter between blocks was not perfectly centered.
+* Fix incorrect example code for withSelect higher-order component.
+* Fix flex-box issue on IE11 for keyboard shortcuts help panel.
+* Fix lint issues found in block-serialization-spec-parser packages.
+* Fix malformed SVGs for Facebook.
+* Fix small alignment issue with the inserter arrow.
+* Fix issue with recent blocks showing on mobile.
+* Fix another issue with page publishing.
+* Fix issue with string that was not showing up for translation.
+* Fix left margin of Archives Block.
+* Fix styling issue with block inserter.
+* Fix regression with missing SVG roles and attributes.
+* Fix script registration of TinyMCE to account for compression.
+* Fix embed block pattern mismatch.
+* Fix issue with tooltips not being shown on IconButtons with DotTip children.
+* Fix some regressions with Table Block and make sure it behaves responsibly.
+* Fix regression with textbox spacing and a focus issue.
+* Resolve an issue where removing all blocks from a post with a template assigned would reintroduce the template blocks after saving and reloading the editor.
+* Switch order of operations so that post content is parsed first regardless of the presence of a template.
+* Add doAction when a deprecated feature is encountered.
+* Deprecate Subheading block.
+* Change title and description of Text Columns to include deprecation notice.
+* Remove extra classNames from integration test.
+* Make sure property for gallery=multiple is only set when type of media is image.
+* Avoid changing the public API of the warning component to avoid potential backwards compatibility issues.
+* Check for window in data registry.
+* Update FocusableIframe component URL example.
+* Drop explicit window reference from withSafeTimeout in compose.
+* Prevent case where early editor checks might bail out preventing hidden meta-boxes from being actually hidden.
+* Use “post” instead of “page” in the warning when the post contains blocks.
+* Make alt text for image in example post translatable.
+* Remove TinyMCE paste plugin as it’s absorbed in raw handling modules.
+* Extract LinkContainer from FormatToolbar.
+* Document how to add block style variations.
+* Add mention of Material Design icons to the design docs.
+* Update documentation for block controls.
+* Extend guidelines for managing packages and publishing them to npm.
+* Update contributing guidelines to include local wp dev instructions.
+* Update FAQ doc with info about keyboard shortcuts.
+* Update package-lock.json to expected values.
+* Deprecate onSetup and getSettings as unstable APIs from RichText.
+* Some general updates to handbook documents.
+* Add documentation about floats.
+* Add e2e test for font size mechanism.
+* Make usage of core-data explicit.
+* Create new spec-parser package.
+* Restores the test URL we should be using for e2e tests.
+* Upgrade WP Coding Standards to 1.0.0.
+* Update npm-package-json-lint lock to 3.3.1.
+* Update stylelint to 9.5.0 and stylelint-config-wordpress to 13.1.0.
+* Update lint-staged and docs/manifest.js.
+* Mobile Native
+* - Initial implementation of Toolbar.
+* - Add basic text toolbar actions.
+* - Update on the event interface for contentSizeChange on Aztec component.
+* - Fix toolbar status when pressing buttons on Android (and iOS).
+
+= 3.6.2 =
+
+* Restore min-width to popover.
+* Fix wide toolbar regression
+* Add e2e test for publishing a page
+* Fix typo for removing excerpt block stripping
+
+= 3.6.1 =
+
+* Fixed an issue that caused page publishing to fail.
+* Fixed an issue with the block options menu appearing too narrow.
+
+= 3.6.0 =
+
+* Updated block inserter and library with new icons for all core blocks.
+* Allow showing the sidebar and inspector controls when editing a block in HTML mode.
+* Add new block keyboard shortcuts and consolidate their display in menus:
+* * Insert Before / After block.
+* * Duplicating block.
+* * Toggling the inspector.
+* * Remove block keyboard shortcut.
+* Updated block inserter and library with new icons for all core blocks.
+* Allow showing the sidebar and inspector controls when editing a block in HTML mode.
+* Add new block keyboard shortcuts and consolidate their display in menus:
+* Insert Before / After block.
+* Duplicating block.
+* Toggling the inspector.
+* Remove block keyboard shortcut.
+* Add new keyboard shortcuts help modal documenting available shortcuts.
+* Hide keyboard shortcuts on mobile screens.
+* Open new window if prior preview window has been closed.
+* Bring the preview tab to the front when clicking the preview button.
+* Avoid changing the label of the “publish” button if an auto-save is being performed.
+* Update the Block Inserter to allow searching for terms that contain diacritics.
+* Take into account children blocks when handling disabled blocks.
+* Offer chance to add and revise Tags and Post Format during pre-publish flow.
+* Let menus grow based on the length of its elements.
+* Add visual padding to menus.
+* Avoid scrollbars on Audio block when shown full-width.
+* Improve permalink UI and make it responsive.
+* Change color of links in gallery block caption.
+* Simplify the styling of the “Toggle publish panel” aria-region to avoid content jumps.
+* Make active pill button look pressed.
+* Make sure Latest Posts alignment class behaviour is consistent.
+* Show drop-zone background when file is dragged.
+* Reset active sidebar tab on initial load.
+* Apply new checkbox CSS to radio buttons and fix border radius.
+* Add a couple new dashicons for insert before / after block.
+* Add styles for Spinner component (was relying on core before).
+* Add styles for Notice component.
+* Refactor template select field to use SelectControl.
+* Correctly handle per_page=-1 in the queried data state.
+* Create dummy context components for type switch.
+* Add RegistryConsumer export to data module.
+* Add has_blocks function to the repertoire.
+* Add has_block function and unit tests.
+* Add has_block function and unit tests for it.
+* Introduce strip_dynamic_blocks() for excerpts.
+* Fix issue with default appender placeholder on IE11.
+* Fix issue with shortcode block UI on IE11.
+* Fix tag input interface on IE11.
+* Fix issue with custom element serializer on IE11.
+* Fix issue with meta boxes overlapping the content on IE11.
+* Fix invalidation case of custom block classes.
+* Fix unhandled error dialog styling issue.
+* Fix paragraph splits on react native implementation.
+* Fix code block style regression.
+* Fix issue with code font-size on heading contexts.
+* Fix case where crashed block would overlap with surrounding blocks.
+* Fix issue with block styles on IE11.
+* Fix the heading level buttons on IE11.
+* Fix issues with drag and drop over text.
+* Fix small bug with recent blocks hover style.
+* Use argument swapping instead of named arguments for string placeholders.
+* Pass the the search result object to props.onChange on UrlInput.
+* Add localization context to occurrences of “More” string.
+* Add a Heading block implementation for mobile app.
+* Add the react-native entrypoint to all runtime packages.
+* Move MoreMenu specific styling away from Popover CSS.
+* Ensure meta box functions are available in editor context.
+* Ensure the full content integration test is run.
+* Remove client-side document title updates.
+* Remove TinyMCE shim that was removed in WP 4.9.7.
+* Remove the workaround for intermittent multiple-tab preview test failure.
+* Remove Promise.resolve call that’s already handled by the JS runtime.
+* Remove redundant event handlers from default block appender.
+* Deprecate withContext HOC and remove its usage.
+* Some localization & spelling fixes.
+* Update docs for templateLock’s insert option.
+* Extract Core Blocks to a block-library npm package.
+* Add a license checker script.
+* Allow access to the WordPress installation if DOCKER_ENV=localwpdev.
+* Bring the handbook design up to date.
+
+= 3.5.0 =
+
+* Add an edit button to embed blocks to modify the source.
+* Improve margin collapse within column blocks.
+* De-emphasize inline tokens within the inserter for a better user experience.
+* Polish focus and active styles around buttons and inputs.
+* Polish styles for checkbox component, update usages of toggle to checkbox where appropriate. Update documentation.
+* Improve pre-publish panel styling and textual copy.
+* Prevent duplicate DotTips from appearing.
+* Integrate "queries data" into the entities abstraction for data module.
+* Hide block movers if there are no blocks before and after.
+* Initial improvements for responsive image handling in galleries.
+* Use correct color for primary button bottom border.
+* Allow transitioning post status from scheduled to draft.
+* Improvements for auto-completer keyboard interactions.
+* Place strikethrough formatting button after link as it's less important.
+* Resolve issue with preview sometimes opening redundant tabs.
+* Align timepicker with calendar on pre-publish panel.
+* Expand date filter select box width within media library.
+* Constrain media blocks to content area width in front-end.
+* Reapply box-sizing to slider thumbs.
+* Avoid showing line separator in block settings menu when it's the last item.
+* Introduce additional keyboard shortcuts to navigate through the navigateRegions component.
+* shift+alt+n to go to the next region.
+* shift+alt+p to go to the previous region.
+* Replace all withAPIData usage and deprecate the higher-order component.
+* Add persistence via data plugin interface.
+* Introduce new redux-routine package for synchronous generator in data module.
+* Move embed API call out of block and into data module.
+* Remove no longer needed workaround targeted at resolving a TinyMCE error.
+* Abort selection range set on unset range target. Resolves an issue when merging two empty paragraph blocks created while at the end of an inline boundary.
+* Removing or merging RichText should only trigger if the selection is collapsed:
+* Fix issue with backspace not working as expected when deleting text content from the first block.
+* Fix case where paragraph content could move to previous paragraph when deleted.
+* Remove provisional block behaviour to improve reliability of various interactions.
+* Restore horizontal edge traversal implementation to address issue where pressing Backspace may not place the caret in the correct position if within or after a RichText field.
+* Ensure Gutenberg is disabled when editing the assigned blog posts page.
+* Initialize the Autosaves controller even if revisions are disabled. Fixes several bugs around saving with revisions turned off.
+* Display warning when Cloudflare blocks REST API requests.
+* Improve validation for attribute names in serializer.
+* Add Slot to block menu settings for extensibility.
+* Fix File Block center align behavior.
+* Fix behaviours when deleting on an empty RichText field.
+* Fix parent-dropdown missing for custom post-types.
+* Fix import style statements in ColorIndicator.
+* Fix height of used-once block warning.
+* Fix link for innerBlocks docs.
+* Fix link to server-side-render component.
+* Fix race condition with DomReady.
+* Fix awkward capitalisation in demo post content.
+* Fix warning for unrecognised forwardedRef prop.
+* Fix regression with URL input focus box.
+* Fix error in custom HTML preview when block is empty.
+* Fix colspan bug in table block for tables with thead tags.
+* Fix issue with image inspector controls disappearing once an image block is set to wide/full alignment.
+* Fix issue when image size remains blurry if manually set to a smaller size (i.e., medium) and then changed alignment to wide/full.
+* Fix issue with meta boxes being absent when script enqueued in head depends on wp-edit-post.
+* Resolve an issue where removing all text from a Button block by backspace would cause subsequent text changes to not be accurately reflected. Broader issue with TinyMCE inline elements as containers.
+* Avoid using remove() because it's unavailable in IE11.
+* Address further feedback on duplicated DotTips implementation.
+* Update re-resizable to version 4.7.1 — fix image & spacer blocks resizing on IE.
+* Use a unique querystring package instead of three different ones.
+* Introduce filters to allow developers the ability to customize the Taxonomy Selector UI for custom taxonomies.
+* Introduce RichText component for mobile native and implement the Paragraph Block with it.
+* Use standard label for Alt Text input.
+* Consolidate similar i18n strings.
+* Remove title attributes from the Classic Editor warning.
+* Remove unused code in taxonomies panel.
+* Remove oEmbed fixture files.
+* Remove jQuery dependency from @wordpress/api-fetch.
+* Remove filler spaces from empty constructs.
+* Remove REST API shims for code introduced in WP 4.9.8.
+* Remove unused terms, taxonomies, and categories code.
+* Replace the apiRequest module with api-fetch module.
+* Add inline comment that explains a stopPropagation() within tips implementation.
+* Add gutenberg_can_edit_post filter.
+* Add watch support for stylesheets in packages.
+* Add JSDoc comment to Popover's focus() method.
+* Add readme docs for all components.
+* Autogenerate documentation from readme files.
+* Add doc note about automatically applied attributes in save.
+* Add test for block mover.
+* Allow demo content to be translatable.
+* Update CSS selectors from :before to ::before.
+* Export the description for server-registered blocks.
+* Export getBlockTypes on react native interface.
+* Expose redux-routine to react native.
+* Expose unknown-type handler methods for mobile.
+* Specify missing wp-url dependencies.
+* Improve JS packages descriptions.
+* Downgrade Docker image version for WordPress for test validation.
+* Move CI back to latest WordPress version and bump minimum version to 4.9.8
+* Use @wordpress/compose instead of @wordpress/components.
+* Update docs for Button component.
+* Update package-lock.json.
+* Updated dependencies: jest, npm-package-json-lint and read-pkg-up.
+* Add Babel runtime dependency to redux routine.
+* Prevent Travis from running when changes are only made to .md files.
+* Add stylelint for SCSS linting.
+* Set babel dependencies to fixed version and add core-js2 support.
+* Trigger E2E test failure on console logging.
+* Update doc links to resources moved to packages folder.
+* Update api-fetch package documentation.
+* Update Lerna to 3.0.0-rc.0.
+* Generate source maps and read those from the webpack build.
+* Rewrite e2e tests using jest-puppeter preset.
+* Introduce a new Extending Editor document specific to editor filters.
+* Improve test configuration and mocking strategy.
+
+= 3.4.0 =
+
+* Add the Inline Blocks API.
+* Rename Shared Blocks to Reusable Blocks.
+* Add a Modal component.
+* Add a REST API Search controller.
+* Add a warning in the classic editor when attempting to edit a post that contains blocks.
+* Add ability for themes to configure font sizes.
+* Add RTL CSS to all packages.
+* Add an edit button to embed blocks.
+* Remove all wp.api usage from the editor package.
+* Add error handling for file block drag-and-drop.
+* Add registerBlockStyleVariation, for registering block style variations.
+* Add a border between panels in the block sidebar.
+* Add a editor.PostFeaturedImage.imageSize filter for the Featured Image.
+* Create a video block when dropping a video on an insertion point.
+* Expose a custom class name hook for mobile.
+* Add a React Native entrypoint for mobile.
+* Only disable wpautop on the main classic editor instance.
+* Retain the id attribute when converting heading tags to heading blocks.
+* Retain target="_blank" on links in converted paragraphs.
+* Improve the handling of imported shortcode blocks.
+* Replace the File block’s filename editor with a RichText.
+* Tweak the block warning style.
+* Add a max-height to the table of contents.
+* Remove the inset shadow from the table of contents.
+* Fix the tag placeholder text for long translations.
+* Fix the table of contents sometimes causing JavaScript errors.
+* Fix the link suggestion dropdown not allowing the first suggestion to be selected by keyboard.
+* Make tooltips persist when hovering them.
+* Add missing aria-labels to the audio and video block UIs.
+* Add an icon and accessibility text to links that open in a new tab.
+* Fixed shared blocks adding unnecessary rewrite rules.
+* Fix a regression in the colour picker width.
+* Fix the colour picker focus border being off-centre.
+* Combine ColorPalettes into a single panel for Button and Paragraph blocks.
+* Fix the ColorIndicator style import.
+* Fix auto-linking a URL pasted on top of another URL.
+* Add persistent store support to the data module.
+* Fix the Latest Comments block using admin imports.
+* Fix a warning when adding an image block.
+* Fix the classic block toolbar alignment.
+* Fix a warning in the block menu.
+* Change all blocks to use supports: align, instead of the align attribute.
+* Improve the ContrastChecker logic for large font sizes.
+* Update the is-shallow-equal package to use ES5 code.
+* Deprecate getMimeTypesArray, mediaUpload, and preloadImage.
+* Deprecate wideAlign in favour of alignWide.
+* Document Node version switching in the testing documentation.
+* Document examples of the registerBlockType hook.
+* Document an example of the block transforms property.
+* Document Gutenberg’s camelCase coding style.
+* Improved all of the package descriptions.
+* Update coding standards to allow double quoted strings to avoid escaping single quotes.
+* Standardise the package descriptions and titles.
+* Extract the editor package.
+* Isolate and reset e2e tests every run.
+* Improve test configuration and mocking strategy.
+* Fix test coverage configuration.
+* Fix the block icons e2e tests.
+* Bump the Puppeteer version.
+* Use simpler jest.fn() mocks for api-fetch calls in unit tests.
+
+= 3.3.0 =
+
+* Add new Archives block for displaying site archives.
+* Add new Latest Comments block to widgets category.
+* Add “Convert to blocks” option in HTML block.
+* Correct caret placement when merging to inline boundary.
+* Move block switcher from header to multi-block toolbar for multiselection.
+* Add video block attributes for Autoplay, Controls, Loop, Muted.
+* Remove HTML beautification and preserve whitespace on save.
+* Formalize RichText children value abstraction.
+* Allow transformation of image block to file block and vice-versa.
+* Support preload attribute for Audio Block.
+* Avoid popover refresh on Tip mount.
+* Introduce “registry” concept to the Data Module.
+* Convert successive shortcodes properly.
+* Hide “Convert to Shared Block” button on Classic blocks.
+* Update spacing in pre-publish panel titles.
+* Use do_blocks to render core blocks content.
+* Remove restoreContentAndSplit in RichText.
+* Hide insertion point when it is not possible to insert the default block.
+* Refactor block converters to share common UI functionality.
+* Replace the apiRequest module with api-fetch module.
+* Add audio/video settings title to settings panel.
+* Normalize the behavior of BlockListBlock’s “Enter” key handling to insert the default block.
+* Rename baseUrl entities property as baseURL in entities.
+* Rename UrlInput component as URLInput.
+* Give File block a low files transform priority.
+* Make tooltips persist when hovering them.
+* Optimise design of heading line heights.
+* Add a filter(‘editor.FeaturedImage’) for the FeaturedImage component.
+* Fix vertical arrow navigation skips in writing flow.
+* Fix incorrect polyfill script handles.
+* Fix template example so that it is correct.
+* Fix exception error when saving a new shared block.
+* Fix getInserterItems caching bug and add new test case.
+* Fix issue with spacer block resizing and sibling inserter.
+* Fix files configuration entry in package.json for wordpress/babel-preset-default.
+* Fix config and regenerate updated docs.
+* Fix dependency mistake in api-fetch.
+* Fix metaboxes save request (parse: false).
+* Fix issue with name field not being focused when a shared block is created.
+* Fix box sizing for pseudo elements.
+* Fix an error which occurs when assigning the URL of a Button block.
+* Improve usage and documentation of the landmark region labels.
+* Substitute the remaining uses of unfiltered_html capability and withAPIData.
+* Remove the “Extended Settings” meta box wrapper.
+* Remove NewBlock event handling from RichText.
+* Remove legacy context API child context from Block API.
+* Remove Text Columns block from insertion menus in preparation for Try outreach.
+* Remove unused autocompleter backcompat case.
+* Change label in Cover Image block for background opacity.
+* Change the text label on Image block from “Source Type” to “Image Size”.
+* Backup and restore global $post when preloading API data.
+* Move packages repository into Gutenberg with its history.
+* Enhance the deprecated module to log a message only once per session.
+* Switch tests away from using enzyme (enzyme.shallow, enzyme.mount, etc).
+* Unblock tests from being skipped.
+* Add basic test for shortcode transformation.
+* Add e2e test for block icons.
+* Add e2e tests for the NUX tips.
+* Add e2e tests for shared blocks.
+* Remove data-test attribute from UrlInputButton output.
+* Deprecate id prop in favor of clientId.
+* Rename MediaPlaceholder onSelectUrl prop as onSelectURL.
+* Remove unnecessary default prop from test.
+* Point the package entry to src directly for native mobile.
+* Use clearer filenames for saved vendor scripts.
+* Update local install instructions and add add more verbose instructions when node versions don’t match.
+* Reorder package.json devDependencies alphabetically.
+* Coding Guidelines: Prescribe specific camelCasing behaviors.
+* Regenerate docs using docs:build command.
+* Add documentation for ALLOWED_BLOCKS in Columns.
+* Add link to support forum in plugin menu.
+* Deprecate buildTermTree function in utilities.
+* Deprecate property source in Block API.
+* Deprecate uid in favor of clientId.
+* Deprecate grouped inner blocks layouts.
+* Improve eslint checks for deep imports.
+* Improve IntelliSense support when using VS Code.
+* Move the components module partially to the packages folder.
+* Add the blocks module to the packages folder.
+* Add wp-deprecated dependency to wp-element.
+* Add @babel/runtime as a dependency to wordpress/components.
+* Add @babel/runtime as a dependency for packages.
+* Add a new compose package.
+* Extract entities package.
+* Extract viewport package.
+* Extract @wordpress/nux package.
+* Create new spec-parser package.
+* Update Dashicons to latest build.
+* Update test for babel-preset-default.
+* Update code to work with Babel 7.
+* Update package-lock.json with eslint-scope version 3.7.3.
+* Update node-sass.
+
+= 3.2.0 =
+
+* Add block styles variations to the Block API.
+* Add support for Inline Images and Inline Blocks API.
+* Convert Columns to a set of parent and child blocks, including a wrapper element and more reliable front-end presentation.
+* Allow registering new block categories.
+* Add support for locking Inner Block areas.
+* Add File Block for uploading and listing documents, with drag and drop support.
+* Introduce Modal component to expand the extensibility suite of UI components.
+* Redesign block transformation menu.
+* Improve style display of region focus areas.
+* Prevent blocks from being draggable if a template lock exists.
+* Parse superfluous classes as custom classes preventing a block being considered invalid for such cases.
+* Support “Autoplay” and “Loop” in Audio Block “Playback Controls”.
+* Always show “new gallery item” below the gallery.
+* When dragging images to create a gallery, immediately show the images while uploading is happening.
+* Optimize withSelect to avoid generating merge props on equal props.
+* Remove the “scroll shadow” at the bottom of the inserter library.
+* Remove the bottom border on the last collapsible panel.
+* Remove wrapping div from paragraph block (in the editor) for performance audit.
+* Add Image Block ‘Link to’ setting.
+* Allow margins to collapse & refactor block toolbar.
+* Keep NUX tips open when the user clicks outside.
+* Add initialTabName prop to Tab Panel component.
+* Add higher order component to constrain Tab keyboard navigation.
+* Display server error message on media upload when one exists.
+* Improve “add block” text in NUX onboarding.
+* Improve experience of using image resize handles — placing them at the middle of the edges instead of the corners.
+* Update color of the Shared panel icon to be the same as all other icons.
+* Verify if block icon background and foreground colors are readable. Warn in the console otherwise.
+* Address various design details on Plugin API icon treatment in header and popover.
+* Include all image sizes on the media upload object when they exist.
+* Move the delete block action to the ellipsis menu for the block. Introduce separator in the menu.
+* Make the inserter results panel focusable and improve accessibility.
+* Improve publish panel accessibility and add new publish landmark region.
+* Open preview to previewLink if not autosaveable.
+* Make sure autocompleted values make it into the block’s saved content.
+* Avoid setAttributes on end-of-paragraph seeking to resolve unnecessary performance degradations.
+* Avoid re-render and subsequent action dispatch by adopting module constant.
+* Avoid focusing link in new NUX tooltip
+* Avoid showing hover effect if the ancestor of a block is multi-selected.
+* Schedule render by store update via setState. Fixes condition where appender would insert two copies of a block.
+* Inner Blocks refactor:
+* * Update deprecated componentWillReceiveProps to equivalent componentDidUpdate.
+* * Avoid deep equality check on flat allowedBlocks prop shape.
+* * Avoid handling unexpected case where UPDATE_BLOCK_LIST_SETTINGS is not passed an id.
+* * Avoid creating new references for blockListSettings when settings not set, but the id never existed in state anyways.
+* * Avoid switch fallthrough on case where previous updateIsRequired condition would be false, which could have introduced future maintainability issues if additional case statements were added.
+* * Add test to verify state reference is not changed when no update is needed.
+* * Consistently name allowedBlocks (previously also referred to as supportedBlocks).
+* Consider horizontal handled by stopPropagation in RichText. Fixes edge case with inline boundaries at the end of lines. With further improvements.
+* Ensure ellipsis icon button is visible when block settings menu is open.
+* Simplify RichText to have a single function for setting content vs. the current updateContent and setContent, by removing updateContent.
+* Optimize RichText by removing the creation of undo levels at split and merge steps.
+* Simplify the RichText component’s getContent function to remove a call to TinyMCE’s isEmpty function, which incurs a DOM walk to determine emptiness.
+* Optimize the RichText component to avoid needing to keep a focusPosition state.
+* Reenable pointer events on insertion point hover for Firefox.
+* Introduce colors slugs in color palette definitions to ensure localization.
+* Respect inner blocks locking when displaying default block appender.
+* Use color styles on the editor even if the classes were not set.
+* Move “opinionated” Gutenberg block styles to theme.scss.
+* Don’t allow negative values in image dimensions.
+* Fix IE11 formatting toolbar visibility.
+* Fix issues with gallery block in IE11.
+* Fix import statement for InnerBlocks.
+* Fix broken links in documentation.
+* Fix text wrapping issues in Firefox.
+* Fix showing the permalink edit box on the title element.
+* Fix focus logic error in Tips and tidy up docs.
+* Fix instance of keycode package import.
+* Fix case where an explicit string value assigned as an attribute would be wrongly interpreted as false when assigned as a boolean attribute type in the parser.
+* Fix the data module docs by moving them to the root level of the handbook.
+* Fix specificity issue with button group selector.
+* Fix CSS property serialization.
+* Fix left / right alignments of blocks.
+* Fix CSS vendor-prefixed property serialization.
+* Fix arrows navigation in the block more options menu.
+* Let ⌘A’s select all blocks again.
+* Check for forwardedRef in withGlobalEvents.
+* Address issues with left / right align improvements in RTL.
+* Different approach for fixing sibling inserter in Firefox.
+* Correctly handle case where ‘post-thumbnails’ is array of post types.
+* Remove blocks/index.native as the default is compatible with React Native app.
+* Allow editor color palette to be empty.
+* Support setup with single array argument in Color Palette registration.
+* Only save metaboxes when it’s not an autosave.
+* Force the display of hidden meta boxes.
+* Implement core style of including revisions data on Post response.
+* Remove post type ‘viewable’ compatibility shim.
+* Remove unused block-transformations component.
+* Use withSafeTimeout in NUX tips to handle cases where plugins modify the $post global.
+* Update HOCs to use createHigherOrderComponent.
+* Deprecate property source in Block API.
+* Documentation: fix rich-text markdown source.
+* Tweak release docs and improve release build script.
+* Add focusOnMount change to deprecations.
+* Add e2e test for sidebar behaviours on mobile and desktop.
+* Add e2e test for PluginPostStatusInfo.
+* Add snapshot update script.
+* Update import from @wordpress/deprecated.
+* Extract “keycodes” into its own package and rework the Readme file.
+* Add shortcode package instead of global.
+* Add package: @wordpress/babel-plugin-import-jsx-pragma.
+* Update nested templates to new columns format.
+* Generate the manifest dynamically to include the data module docs in the handbook.
+* Expose the grammar parser to the mobile app.
+* Drop the .js extension from @wordpress/element’s package.json entry-point so when used in the mobile RN app the correct module (index.native.js) can be resolved by Metro.
+* Add packages Readme files to the handbook.
+* Add link in documentation to supported browsers.
+* Add initial document on copy guidelines.
+* Add missing documentation for InnerBlocks props.
+* Regenerate package-lock.json to address unintentional changes.
+* Use cross-env for plugin build scripts to address issues on Windows machines.
+* Invert JSX pragma application condition.
+* Ignore non-JS file events in packages.
+* Drop deprecations slated for 3.2 removal.
+* Publish multiple new versions of packages.
+
+= 3.1.1 =
+
+* Fix permalink editor not appearing.
+* Fix sibling block inserter not working in Firefox and Safari.
+
+= 3.1.0 =
+
+* Implement Tips Interface to guide a user in the new editor interface.
+* New design version of sibling inserter (the ability to insert blocks between other blocks).
+* Allow users to re-enable Tips.
+* Allow the user to preview changes to a published post without first updating the post.
+* Show the preview mode for HTML blocks converted into shared blocks. This streamlines the process of creating straightforward HTML blocks and letting users insert them visually.
+* Exclude the currently focused block from the block completer options. (i.e. don’t show paragraph as an option if already on a paragraph)
+* Trigger autosave as standard save for draft by current user.
+* Add mime type checking to the pre-upload error messaging system when uploading media.
+* Allow block hover outlines to draw color from admin theme.
+* Allow transforming multiple paragraph blocks into a single quote block.
+* Block API: move useOnce block configuration to supports.multiple = false.
+* Add strikethrough support for Markdown conversion when pasting.
+* Add yAxis=middle support to Popover to allow showing arrows vertically centered for NUX tips.
+* Add BlockIconWithColors component and use it for the block header with description in the inspector.
+* Add error notices mechanism directly to media placeholder.
+* Refactor the initialization of the editor to only require a post ID.
+* Optimize the default column width for character length and use the same width for the text editor.
+* Incremental improvements and polish to the mobile block toolbar.
+* Visually compensate nested blocks for block padding.
+* Prevent slash autocompleter from letting users insert two cases of a useOnce block.
+* Let screen readers announce the block aria label.
+* Improve the accessibility of featured images.
+* Make aria-multiline true by default in RichText so the content field is properly announced.
+* Add back role textbox to the List block and improve aria-multiline usage.
+* Replace the renderBlockMenu prop with Slot/Fill.
+* Hide disabled blocks from shortcut inserter.
+* Avoid deprecated React Lifecycle hooks in withAPIData.
+* Improve the element serializer to avoid double ampersand encoding of valid character references.
+* Update drop-cap design to better balance line length.
+* Describe expanded state of “more options” panel.
+* Improve DotTip positioning fix.
+* Implement Button component as assigning ref via forwardRef (new React API).
+* Improve serialising JSON to PHP-compatible query strings.
+* Introduce rendererPathWithAttributes() for ServerSideRender.
+* Refactor the getPostEdits selector to avoid relying on Lodash’s _.get.
+* Refactor withSelect to use getDerivedStateFromProps.
+* Replace JSON-escaped quotation mark with unicode escape sequence in Block API. Fixes PlainText component not properly escaping attributes under some specific user roles.
+* Fix regression in Columns block’s front-end style.
+* Fix regression in SVG support for block icons.
+* Fix PHP 5.2 notice by ensuring $memo is always an array.
+* Fix margins of embed block content.
+* Fix autocomplete behaviour in IE11.
+* Fix regression with formatting toolbar not showing divider between some block controls.
+* Fix issue where pasting an inline shortcode would produce a separate shortcode block.
+* Fix issue when copy pasting images in Chrome.
+* Fix typos in code comments.
+* Fix consistency of hover styles in toolbars.
+* Fix option for linking to attachment page on gallery block.
+* Fix Classic Editor adding paragraphs from block boundaries.
+* Fix post publish panel showing incorrect UX for contributors who don’t have publishing capability.
+* Fix issues with floats and the side UI on wide and full-wide.
+* Fix issue where server side upload errors disappear automatically.
+* Fix block inserter popover in RTL mode.
+* Fix mp3 uploads on chrome.
+* Fix getMimeTypesArray return documentation.
+* Avoid showing error if autosave runs and there are no changes to save.
+* Prevent any disabled button from changing the cursor to pointer.
+* Remove ‘who’=>’authors’ compatibility shim as it’s part of WP 4.9.6.
+* Remove confusing “wrap text” from Button settings.
+* Remove the usage of the componentWillMount lifecycle.
+* Remove the componentWillReceiveProps lifecycle usage.
+* Remove createInnerBlockList utility / context. This should be a simplification of block context, potentially with some performance and/or memory improvements, as an intermediary component is no longer created.
+* Improve translatable strings containing “%s” to have a translator comment.
+* Move trash post URL change to the BrowserUrl component. Consolidates all browser navigation (url changes and actual navigation).
+* Simplify the withColors HOC so we can avoid the usage of memoize while still having a correct implementation without unnecessary rerenders.
+* Refactor Higher-order components in data module to avoid the use of componentWillMount.
+* Use mdash for block description in cover image.
+* Ensure that only the latest promise updates the autocompleter state for more predictable behaviour.
+* Wrap PluginPostStatusInfo with PanelRow rather than Slot. Fix issue with hard to style divs.
+* Update demo content to avoid dirtying embed.
+* Allow using ServerSideRender component without defined attributes.
+* Avoid loading Gutenberg assets in other admin pages.
+* Add a new @wordpress/api-request package. Instead of relying on globals to set the nonce/rootURL, it users configurable middlewares. Preloading support is also built as a middleware.
+* Move the Core Data Module to packages.
+* Move Plugins module to packages.
+* Rename all the hooks moved from blocks to editor.
+* Add NUX e2e tests.
+* Add e2e tests for Plugins API.
+* Add es5 samples to edit-post and plugins.
+* Add e2e test to blocks.BlockEdit filter.
+* Add snapshot test for MoreMenu component.
+* Fix broken links in readme files.
+* Build tooling: add linting for package.json files.
+* Further explanation for why .normalize() is optional in raw-handling.
+* Update icon color readme example.
+* Generate docs for the data module.
+* Enable Strict-Mode of React.
+* Publish new versions of WP packages.
+* Regenerate integrity checks to sha512.
+* Drop deprecations slated for 3.1 removal.
+* Upgrade React 16.3.2 to React 16.4.1.
+
+= 3.0.1 =
+
+* Fix regression in Columns block's front-end style
+* Fix regression in SVG support for block icons
+* Build tooling: Add linting for package.json files
+
+= 3.0.0 =
+
+* Redesign the inserter with collapsible panels.
+* Add support for Child Blocks. These create a relationship between blocks and updates the inserter to show blocks based on context.
+* Implement a new block hover and select approach to improve nested block selection and clarity.
+* Allow expanding selection on consecutive Meta+A presses.
+* Add shared blocks to the blocks autocompleter.
+* Iterate on behaviour of the “between blocks inserter”.
+* Multiple longstanding fixes to the UrlInput box by using Popover component instead of custom positioning.
+* Allow themes to opt-in to the visual styles provided by core blocks.
+* Allow custom colors in block icons.
+* When focused on a parent with InnerBlocks set, show available child blocks clearly at the top. Blocks with children are marked visually in the root inserter.
+* Add publish panels support for plugins.
+* Scroll the inserter menu to the relevant position when opening a panel.
+* Expand matching categories when searching the block library.
+* Introduce a dedicated autosaves endpoint for handling autosave behavior. Improves general handling of revisions through REST API saves.
+* Show autosave notice when autosave exists.
+* Send all fields when transmitting an autosave, fixing missing titles.
+* Allow clicking the block’s input fields.
+* Move “Saved” blocks to the bottom and show distinct icon on the panel name.
+* Improve max-upload size error message.
+* Normalize unicode in raw handling.
+* Allow inserting a link with no text selected.
+* Center the background of the cover image block.
+* Make the Classic block toolbar sticky while scrolling.
+* Make Button component styles independent from Core Styles.
+* Use new "theme" style mechanism to restore Quote styles on the front.
+* Make various greys less dull when used with opacity.
+* Set the correct min-width for the ChromePicker popover.
+* Unify all the media blocks placeholders under a unique component.
+* Address focus style regression in menu and improve display of keyboard shortcut.
+* Refactor popover to clarify computations and address multiple cases of overflow issues.
+* Avoid URL redirect for published post autosave.
+* Refactor URL redirect as BrowserURL component and ensure redirect for new posts.
+* Avoid superfluous changes in RichText.
+* Improve performance for PublishPanel and extensions.
+* Unselect blocks when opening the document settings.
+* Add text alignment options to verse block toolbar.
+* Make sure the Title element uses the same max-width as blocks.
+* Improve title component so it works with and without editor styles.
+* Properly associate the spacer height input label.
+* Further visual polish to new inserter design.
+* Simplify inserter accessibility.
+* Fix block icon alignment in block inspector.
+* Fix issue with excerpt textarea height overflow.
+* Fix typo in withRehydration function call.
+* Fix Post Formats UI not showing.
+* Fix regressions with Button component after PostCSS.
+* Fix issue with applied formats being lost.
+* Fix unset background-color on sidebar headings.
+* Fix case where inbetweenserter would linger if you clicked to insert and then clicked away.
+* Fix issue with rich text toolbar being gone in captions.
+* Fix padding and outline style for expander panel.
+* Fix CodeEditor component not loading when WordPress is installed in a subfolder.
+* Fix regression with sticky toolbar border.
+* Fix some intermittent E2E test failures.
+* Fix “no results” message within inserter.
+* Fix visual issue with normal buttons with icons.
+* Fix issue where the sidebar would remain open on mobile when the page loaded if it was opened before.
+* Fix fileName not being respected when the image is uploaded via drag & drop.
+* Fix regression in spacer block.
+* Fix getInserterItems cache.
+* Fix intermittent adding-blocks E2E test failure.
+* Fix issue with shared block preview being rendered hidden.
+* Fix alignment issue with hover label on wide and full-wide.
+* Fix Windows-unfriendly theme.scss loader rule.
+* Fix issue where pasting would fail in IE11.
+* Fix issue with editing paragraph blocks in shared blocks.
+* Address small code style fixes on the core-data module.
+* Add support for getEntityRecords selectors/resolvers to the core data module to avoid duplication across the different entities.
+* Remove drag handle from block breadcrumb.
+* Improve Child Blocks code footprint.
+* Address package issues with npm audit fix.
+* Use Core’s TinyMCE version to avoid conflicts.
+* Scope the rule adding a white background to the html element.
+* Remove onFocus from core blocks’ RichText usage.
+* Remove post type capabilities from the user object.
+* Remove the dependency on the editor module code from blocks tests.
+* Expose preview_link through the REST API and use within client.
+* Only load Gutenberg Polyfill in editor pages.
+* Refine code statement of image classes.
+* Add support for the default_page_template_title filter in page-attributes meta-box.
+* Add additional condition to “Available templates” meta-box logic.
+* Ensure the wp-editor script is also enqueued soon using the enqueue_block_assets hook.
+* Cleanup shared block tests.
+* Provide cross-browser node containment checking.
+* Add unit tests for core-blocks/more/edit.js components.
+* Add documentation about ServerSideRender.
+* Auto-generate human-readable version of Gutenberg block grammar.
+* Doc Block cleanup for rich-text component.
+* Address multiple typos in code comments.
+* Skip test files when generating build folders for packages.
+* Fail E2E tests when uncaught page error occurs.
+* Extract new blob package out of utils module.
+* Update the wait function name to discourage its use in E2E tests.
+* Introduce new module with deprecation utility.
+* Introduce insertBlock() utility for E2E tests.
+* Move data module to the package maintained by Lerna.
+* Avoid using spread for objects to work with all node 8x versions.
+* Add lint rule to check that memize() is used.
+* Add global guard against ZWSP in E2E content retrieval.
+* Add building/watching support to Gutenberg packages.
+* Add further explanation for why .normalize() is optional.
+* Add new webpack plugin to handle library default export.
+* Reload the page after webpack watch compile.
+* Publish numerous WP packages updates from repository.
+* Drop deprecations slated for 3.0 removal.
+* Always publish main and module distributions in packages.
+* Upgrade mousetrap to 1.6.2.
+* Update all WordPress packages to the latest version.
+* Bump WordPress requirements to 4.9.6.
+
+= 2.9.2 =
+
+* Ensure the Title uses the same max-width as blocks
+* Center the background of the cover image block
+* Fix formatting controls regression
+* Fix classic editor visual mode regression
+
+= 2.9.1 =
+
+* Ensure the wp-editor script is also enqueued soon using the `enqueue_block_assets` hook
+* Allow clicking the block's input fields (regression fix)
+* Remove post type capabilities from the user object
+
+= 2.9.0 =
+
+* Add support for pinning plugin items in the main editor header. This is an important part of the editor Plugin API seeking to both grant plugins high visibility while offering users a consistent and flexible UI that can scale better.
+* Add shortcut tooltips for main toolbar.
+* Add remaining RichText shortcuts for formatting toolbar. Display them in tooltips.
+* Display the block toolbar and controls below the block on mobile.
+* Add automatic handling of focus for RichText component.
+* New reusable component: FontSizePicker. Example use in paragraph block.
+* Query for all authors with an unbounded per_page=-1 request. Makes sure no users appear missing.
+* Make the editor canvas friendly towards colored backgrounds. Improves support of nested structures over backgrounds as well.
+* Remove block alignment from paragraph block with deprecation handling.
+* Ensure contributors can create tags and manage categories.
+* Exclude private blocks from the slash autocompleter.
+* Close the post publish panel only when the post becomes dirty.
+* Add toggle to set fixed widths in Table block.
+* Surface and style the resizing tool in Table block.
+* Iterate on table block front-end styles.
+* Transform into the correct embed block based on URL patterns.
+* Allow resetting the permalink by saving it as empty.
+* Add text alignment options to Subhead block.
+* Move Heading block alignment options from the inspector to the toolbar.
+* Writing Flow: consider tabbable edge if no adjacent tabbable.
+* Implement Button as assigning ref via forwardRef.
+* Avoid adding terms when tabbing away from the tag selector field.
+* Add a max-height to Table of Contents menu.
+* Make any iframe embed responsive in the editor.
+* Update PostExcerpt component to use TextareaControl.
+* Show block remove button on empty paragraph blocks.
+* Introduce wp:action-publish and update corresponding UI to reference it. Use wp:action-publish to determine whether to display publish UI.
+* Use wp:action-assign-author to indicate if user can assign authors. Fixes issues with author selector not appearing under certain circumstances.
+* Permit unbounded per_page=-1 requests for Pages and Shared Blocks. Removes limit on how many items are retrieved.
+* Permit unbounded per_page=-1 requests for Categories and Tags.
+* Improve written descriptions of core blocks.
+* Show caption and description settings in featured image modal.
+* Make sidebar toggle button open the block inspector if a block is selected.
+* Avoid setting font-style when using dropcap.
+* Preserve image ID in raw handling.
+* Add a data store to manage the block/categories registration.
+* Avoid change in RichText when possible. It prevents unnecessary history records.
+* Stop unnecessary re-renders caused by withColors. Also solve memoize problems.
+* Move components from the blocks to the editor module.
+* Move editorMediaUpload to the editor module.
+* Move the editor settings into the editor’s store.
+* Change subhead block to subheading.
+* Add cache to getUserQueryResults and avoid authors rerender on every key press.
+* Rename isPrivate → supports.inserter in Block API.
+* Fix multi selection with arrows + shift.
+* Fix caretRangeFromPoint for Firefox.
+* Fix a PHP Notice in REST API responses.
+* Fix broken example in withAPIData README.
+* Fix issue with UrlInput autofocus when used in a custom block.
+* Fix issue with high contrast indicator in Edge.
+* Fix and update block fixture regeneration.
+* Fix gallery width to match width of other elements.
+* Fix Fragment render error on empty children.
+* Fix ServerSideRender bug with Columns block.
+* Fix block icon alignment.
+* Fix absent editor styles in Classic block.
+* Fix state variable name in core-data.
+* Fix generating admin schemes styles.
+* Fix captions on resized images.
+* Fix case where link modal would hide on rerender.
+* Fix paste with selection/caret at start or end.
+* Fix appender height to match paragraph block.
+* Use core-blocks prefix for class names.
+* Prevent classname override when passing className as argument.
+* Remove document outline from the sidebar.
+* Framework work to support React Native mobile app explorations:
+* Refactor the Code block .
+* Refactor “More” block.
+* Extract edit to their own file (part 1, part 2).
+* Use targetSchema of JSON Hyper Schema to communicate sticky action.
+* Tweak targetSchema Response for sticky posts.
+* Load additional REST API files if controller is defined.
+* Restore the wp-blocks stylesheet for backwards compatibility concerns.
+* Add documentation for title and modalClass props in MediaUpload.
+* Copy edits to theme extensibility.
+* Add a lint rule for enforcing ellipsis use.
+* Use a postcss plugin to generate the admin-schemes styles.
+* Move date module to packages maintained by Lerna. Move element to packages maintained by Lerna.
+* Extract dom package and make it maintained with Lerna.
+* Move blocks raw handling tests to test/integration folder.
+* Remove skipped tests which fail, enable those that pass.
+* Add missing unit test for received entity records.
+* Update Notice README.
+* Update wordcount package to prevent crash.
+* Update dom-react to 2.2.1.
+* Update React to 16.3.2.
+* Update packages to pass npm audit.
+* Upgrade rememo dependency to 3.0.0.
+* Updates the minimum required version of npm to version 6.0.0 or greater.
+* Update testing-overview document.
+* Update package-lock.json for fsevents.
+* Avoid tail-ing the PHP 5.2/3 build logs.
+* Remove Docker compose deprecated parallel option.
+* Remove fsevents from optionalDependencies.
+* Remove %s from Lerna publish message.
+* Deprecate isExtraSmall utility function.
+* Add npm update to build script.
+* Make lerna a dependency rather than a devDependency.
+* Support adding a human-readable deprecation hint.
+* Drop features slated for 2.9 removal.
+* Introduce the common build folder to be used by all modules.
+
+= 2.8.0 =
+
+* Add a pasting schema in raw content handling. It simplifies whitelisting and reduces the amount of filters run. Should improve reliability, clarity, markdown conversion, and usage in blocks.
+* Add “Spacer” block to create empty areas.
+* Add Server Side Render component.
+* Expand public InnerBlocks API with support for template configuration and allowedBlocks logic.
+* ColorPalette improvements:
+ * Implement mechanism to use classes for configured colors instead of inline styles. Use it in Button block as well.
+ * Use color name in ColorPalette aria-label for making color selection more accessible.
+ * Improve accessibility of PanelColor by announcing currently set color by name.
+ * Hide color pickers in paragraph and button if no colors are available.
+* Add a format prop to allow HTML string values to be used in RichText component. This should be a useful API addition for plugin developers.
+* Improve the make gallery modal and allow it to use the correct mode when editing.
+* Improve performance by avoiding creating a new uids prop on each block rerender.
+* Make sure createInnerBlockList never updates when passed using context.
+* Introduce initial “entities” data model abstraction to automatically build state selectors.
+* Hide the movers and the block menu when typing.
+* Optimize the shouldComponentUpdate path of withSelect.
+* Use support: align API in Columns block, fixes issue with alignment.
+* Filter the PostFormat list to those supported by the theme.
+* Used fallback styles to compute font size slider initial position.
+* Indent serialized block output with tabs as part of Block API.
+* Add a RichText.Content component to be used in conjunction with RichText.
+* Determine emptiness by value in RichText.
+* Call resolver isFulfilled once per argument set in data modules.
+* Extend BlockEdit context with name and use it for autocompleters.
+* Improve order of block shortcuts within inline inserter.
+* Improve terms token feedback and accessibility.
+* Introduce theme_supports with formats to REST API index.
+* Switch post-author component to use /wp/v2/users/?who=authors. Related #42202.
+* Further harden who=authors check by author support for post type.
+* Disable link suggestions when value is URL.
+* Make CodeEditor component more extensible.
+* Allow the new “block remove” button appear on focus.
+* Add new “pure” higher order component to wp/element.
+* Add Embed Preview support for classic embed providers. This handled legacy embeds.
+* Add missing label and focus style to the code editor textarea.
+* Introduce editorMediaUpload wrapper and fix issue with images not being attached to a post.
+* Used editorMediaUpload in Gallery files transform (images drag&drop).
+* Make URL creation mechanism smarter around relative links.
+* Add a type attribute to input elements.
+* Add missing custom class in latest posts & categories block.
+* Add visible label to shared block name input.
+* Add ref="noreferrer noopener" for target="_blank" links.
+* Add drop cap help text in paragraph block.
+* Remove the text alignment from the block inspector in Cover Image.
+* Make sure aria-disabled buttons (movers) stay disabled on focus.
+* Simplify the BlockBreadcrumb component and its semantics.
+* Only display featured image UI when theme supports it.
+* Improve display of URL input.
+* Improve consistency in how + icon is shown on the inserters.
+* Extract block library to separate module.
+* Improve handling of admin theme colors.
+* Avoid calculating the closest positioned parent by binding the RichText wrapper div.
+* Use IconButton on breadcrumbs to increase consistency and accessibility.
+* Reset change detection on post update, resolving an issue where changes made while a post is saving are not accurately reflected in change detection.
+* Hide inspector controls if no image is selected in Cover Image.
+* Minor improvements for the permalink “Copy to clipboard” button.
+* Fix scrolling issues with very long and multi-line captions.
+* Fix problem with front-end output of LatestsPosts block.
+* Fix issue with using zero min value in RangeControl.
+* Fix Markdown paste containing HTML.
+* Fix permalink linking to preview URL instead of live.
+* Fix issue with update button becoming invisible on mobile on already published posts.
+* Fix showing/hiding the right block side UI on RTL languages.
+* Fix Classic block regression after extraction of the blocks into a separate script.
+* Fix issue where when creating a new post would default to the block sidebar if it was opened before.
+* Fix issue when pasting content with inline shortcodes would produce a separate block.
+* Fix BlockEdit hooks not working properly with context.
+* Fix regression with select box.
+* Fix translation strings in embed block.
+* Fix regression with formatting button hover/focus style.
+* Fix arrow navigation in the shared block more options menu.
+* Fix orderby typo in latest posts block.
+* Fix the clipboard button as IconButton usage.
+* Restore hiding drop cap on focus to prevent bugs with contenteditable.
+* Restore priority on embed block for raw transforming.
+* Remove no longer mandatory use of isSelected in block edit.
+* Remove permalink_structure from REST API index as per #42465.
+* Remove old solution for focus after deprecation period.
+* Refactor withColors HOC to allow configuring the mapping when instantiating the component.
+* Refactor PanelColor to avoid the need for the colorName prop.
+* Use a “users” reducer combined with a “queries” sub state to map authors to users.
+* Make sure block assets are always registered before wp-edit-post script.
+* Expose Gutenberg Data Format version in the REST API response.
+* Split loading of API actions and filters to its own file.
+* Switch to rest_get_server() for compatibility with trunk.
+* Pre-load REST API index data to avoid flash of missing data.
+* Deprecate event proxying in RichText.
+* Avoid duplicate save request in shared block which could cause race conditions.
+* Update docs folder structure and make all internal handbook links relative.
+* Update theme extensibility documentation to include editor widths.
+* Add section about translating the plugin to the contributing doc.
+* Improve documentation and clarity of the Toolbar component.
+* Add documentation for undefined attribute source.
+* Add isDebounced prop in autocompleter doc.
+* Add arrow-spacing rule to eslint config.
+* Add arrow-parens rule to eslint config.
+* Enforce array as Lodash path argument.
+* Upgrade react-datepicker to 1.4.1.
+* Upgrade showdown to 1.8.6.
+* Drop deprecations slated for 2.8 removal.
+* Use the @wordpress/word-count package.
+* Use @wordpress/is-shallow-equal for shallow equality.
+* Build Tools: Fix the package plugin script.
+* Improve the G in Gutenberg ASCII
+
+= 2.7.0 =
+
+* Add pagination block (handles page breaks core functionality).
+* Add left/right block hover areas for displaying contextual block tools. This aims to reduce the visual UI and make it more aware of intention when hovering around blocks.
+* Improve emulated caret positioning in writing flow, which places caret at the right position when clicking below the editor.
+* Several updates to link insertion interface:
+ * Restore the "Open in new window" setting.
+ * Remove the Unlink button. Instead, links can be removed by toggling off the Link button in the formatting toolbar.
+ * Move link settings to the left.
+ * Update suggested links dropdown design.
+ * Allow UI to expand to fit long URLs when not in editing mode.
+ * Improve visibility of insertion UI when selecting a link
+* Rework Classic block visual display to show old style toolbar. This aims to help clarify when you have content being displayed through a Classic block.
+* Add ability to edit post permalinks from the post title area.
+* Improve display of image placeholder buttons to accommodate i18n and smaller screens.
+* Add nesting support to document outline feature.
+* Refactor and expose PluginSidebar as final API.
+* Refactor and expose SidebarMoreMenuItem as part of Plugins API.
+* Simplify block development by leveraging context API to let block controls render on their own when a block is selected.
+* Add ability to manage innerBlocks while migrating deprecated blocks.
+* Add a "Skip link" to jump back from the inspector to the selected block.
+* Add preloading support to wp.apiRequest.
+* Add isFulfilled API for advanced resolver use cases in data module.
+* Add support for custom icon in Placeholder component.
+* Disable Drag & Drop into empty placeholders.
+* Refine the UI of the sides of a block.
+* Assure the "saved" message is shown for at least a second when meta-boxes are present.
+* Make sure block controls don't show over the sidebar on small viewport.
+* Add ability to manually set image dimensions.
+* Make Popover initial focus work with screen readers.
+* Improve Disabled component (disabled attribute, tabindex removal, pointer-events).
+* Improve visual display of captions within galleries.
+* Remove default font weight from Pullquote block.
+* Keep "advanced" block settings panel closed by default.
+* Use fallback styles to compute font size slider initial value.
+* Allow filtering of allowed_block_types based on post object.
+* Allow really long captions to scroll in galleries.
+* Redesign toggle switch UI component to add clarity.
+* Improve handling of empty containers in DOM utilities.
+* Filter out private taxonomies from sidebar UI.
+* Make input styles consistent.
+* Update inline "code" background color when part of multi-selection.
+* Replace TextControl with TextareaControl for image alt attribute.
+* Allow mod+shift+alt+m (toggle between Visual and Code modes) keyboard shortcut to work regardless of focus area and context.
+* Allow ctrl+backtick and ctrl+shift+backtick (navigate across regions) keyboard shortcuts to work regardless of focus area and context.
+* Improve Classic block accessibility by supporting keyboard (alt+f10 and arrows) navigation.
+* Apply wrapper div for RawHTML with non-children props.
+* Improve and clarify allowedBlockTypes in inserter.
+* Improve handling of block hover areas.
+* Improve figure widths and floats in imagery blocks, improving theming experience.
+* Eliminate obsolete call to onChange when RichText componentWillUnmount.
+* Unify styling of Read More and Pagination blocks.
+* Replace instances of smaller font with default font size.
+* Fix styling issue with nested blocks ghost.
+* Fix CSS bug that made it impossible to close the sidebar on mobile with meta-boxes present.
+* Fix disappearing input when adding link to image.
+* Fix issue with publish button text occasionally showing HTML entity.
+* Fix issue with side UI not showing as expected on selected blocks.
+* Fix sticky post saving when using meta-boxes.
+* Fix nested blocks' contextual toolbar not being fixed to top when requested.
+* Fix centered image caption toolbar on IE11.
+* Fix issue with meta-box saving case by only attempt apiRequest preload if path is set. Also improve tests for meta-boxes.
+* Fix JS error when wp.apiRequest has no preload data.
+* Fix regression with image link UI, and another.
+* Fix regression with columns appender.
+* Avoid focus losses in Shared block form.
+* Fix ability to select Embed blocks via clicking.
+* Fix handling of long strings in permalink container.
+* Fix resizing behavior of Image block upon browser resize.
+* Show Image block with external image URL and support resizing.
+* Fix hiding of update/publish confirmation notices under WP-Admin sidebar.
+* Fix ID and key generation in SelectControl and RadioControl components.
+* Fix z-index of link UI.
+* Fix default width of embeds in the editor.
+* Revert unintended changes in default font size handling on Paragraph.
+* Disable the Preview button when post type isn't viewable.
+* Remove unused variable.
+* Rename "advanced settings" in block menu to "block settings". Update labels and docs accordingly.
+* Improve description of embed blocks.
+* Default to empty object for previous defined wp-utils.
+* Finalize renaming of reusable blocks to shared blocks.
+* Update 20 components from the editor module to use wp.data's withSelect and withDispatch instead of react-redux's connect.
+* Update another batch of components from the editor module to use wp.data's tools.
+* Replace remaining uses of react-redux in the editor module.
+* Update a batch of core blocks to drop explicit management of isSelected thanks to new context API.
+* Attempt to avoid triggering modsec rules.
+* Use wp-components script handle to pass locale data to wp.i18n.
+* Reference lodash as an external module. This also reduces bundle size.
+* Use border-box on input and textarea within meta-boxes to restore radio buttons to normal appearance.
+* Clarify demo instructions on wide image support.
+* Update docs to address broken sketch file links.
+* Reduce and rename rules in Gutenberg block grammar for clarity.
+* Add test confirming that withFilters does not rerender.
+* Allow E2E tests to work in a larger variety of environments.
+* Add mention of JSON workaround to including structured data in attributes.
+* Document use of GitHub projects in Repository Management.
+* Fix some documentation links.
+* Add accessibility standards checkbox and reference to the project's pull request template.
+* Remove emoji script as it causes different issues. Pending resolution on how to introduce it back.
+* Avoid needing navigation timeout in Puppeteer.
+* Disable login screen autofocus in Puppeteer tests.
+* Allow developers to opt out from some devtool settings to speed up incremental builds.
+* Use the WordPress i18n package and remove the built-in implementation. Update to 1.1.0.
+* Remove deprecated function `getWrapperDisplayName`.
+
+= 2.6.0 =
+
+* Add drag and drop functionality to reorder blocks (in addition to arrow movers).
+* Improve side UI around nested groups and introduce a block name label on hover.
+* Focus the block inspector automatically when a block is selected.
+* Allow extending auto-completers via filters — this also exposes the "user" auto-complete to all RichText component instances, making it much easier to leverage for external blocks.
+* Use debounced search request in user auto-complete mechanism improving the experience of mentioning in sites with more than 100 users.
+* Use custom serializer for texturize compatibility. This removes dependency on react-dom/server and integrates better with wptexturize expectations.
+* Group advanced block settings (class name and anchor) in a panel.
+* Move Post Types Data Fetching to the core-data module.
+* Refactor DocumentOutline to use the data module.
+* Improve performance of drag and drop by avoiding excessive re-rendering.
+* Various UI improvements to controls and components in Block Inspector.
+* Remove react-redux usage from the edit-post module, replacing it with the data module. Also improves performance on some block operations.
+* Add role=menuitem to the More Options menu items.
+* Renamed "Frequent" to "Suggested" in block inserter tab.
+* Invert speak messages in block inspector button.
+* Include only known terms in rendered Terms selector, fixing issue with occasional empty tags.
+* Apply centering style to the theme style output.
+* Avoid term request if term set is empty array.
+* Provide createHigherOrderComponent helper to Element abstraction.
+* Reset block selection when replacing with empty set.
+* Prevent unnecessary state updates to edit-post preferences.
+* Update Sidebar and Menu Item implementations to use React 16.3 context API.
+* Generalise and comment on DOMRect calculation and storage.
+* Reopen sidebar when going to viewport sizes larger than medium.
+* Widen dropzone indicator to match block width.
+* Reset margin and padding values for gallery.
+* More defensive checks when accessing capabilities and terms.
+* Fix autosave condition while editing a post using the Text Mode editor.
+* Fix block movers aria-label info on multi-select groups.
+* Fix centered multiline labels in the block settings menu.
+* Fix issue with Publish button caused by moment timezone configuration.
+* Fix arrow movement inside search input in Inserter.
+* Fix broken translation in FormTokenField placeholder.
+* Fix issue with invalid string value passed to caption in Image block.
+* Fix findDOMNode lint warning.
+* Fix error when DOCKER is not defined.
+* Fix Safari flashing a white screen just before the editor is loaded.
+* Fix problem with meta-boxes toggling.
+* Fix WordCounter error when loading meta boxes.
+* Fix clone function to allow cloning nested blocks.
+* Fix issue with meta-boxes and file inputs.
+* Fix issue with block more button when multi selected.
+* Handle post ID and WP_Post objects passed to gutenberg_can_edit_post().
+* Clear attribute and reset text back to default when cleared in the "More" block.
+* Remove an invalid test case from isCurrentPostScheduled.
+* Remove code transform for uppercase text in Tooltip component.
+* Remove unused PrismJS dependency.
+* Remove redundant z-index in block mover.
+* Remove background color from paragraph and fixed contrast checker on transparent colors.
+* Make block preview title translatable.
+* Make the click-redirector responsive (handles clicking on the bottom area of the editor to focus on last field).
+* Replace cases of bold font weight with weight 600.
+* Various Sass code improvements.
+* Add E2E test for splitting/merging paragraph blocks with Enter/Backspace.
+* Add test to check CPT templates initialization in E2E tests.
+* Add helpers to install/activate/deactivate and remove plugins in E2E tests.
+* Re-incorporate Webpack devtool into development build for improved debugging.
+* Add $HOME/.npm to Travis cache after addition of Puppeteer library.
+* Improve MediaUpload docs.
+* Rework all the extensibility related docs to add structure and clarity.
+* Remove deprecations slated for 2.6.
+* Upgrade React to version 16.3.0.
+* Migrate to Webpack 4.
+
+= 2.5.0 =
+
+* Add support for sharing nested blocks.
+* Introduce a declarative approach to handling display of sidebar content to the Plugin API with PluginSidebar component and portals.
+* Introduce menu item and related components to handle entry point for editor plugin operations, further extending capabilities and available tools in the Plugin API.
+* Add block template validation and ability to reset a template.
+* Add new abstracted data querying interface that provides better handling of declarative data needs and side effects. Introduces registerResolvers enhanced by withSelect.
+* Add predefined sets of font sizes and corresponding UI controls.
+* Improve block margin implementation in order to simplify work needed for nesting blocks.
+* Don't show insertion point between blocks when a template is locked.
+* Update shared block UI to better indicate that a block is reusable.
+* Add support for transforms prioritization to the block API.
+* Improve initial focus allocation within content structure popover for accessibility.
+* Add visibile text to gallery "add item" button for accessibility.
+* Update post taxonomies wp.apiRequest to not depend on ajax specific implementation.
+* Some visual refinements to the main block library inserter.
+* Include custom classes in the block markup within the editor, matching the final render on the front-end.
+* Improve display of block transformation options.
+* Fine-tune the pre- and post-publish flows depending on post status and user role.
+* Improve the accessibility of the MenuItemsToggle buttons and add a speak message for screen reader users to confirm when they switch editor mode.
+* Improve the accessibility of RichText elements by providing textbox roles and aria-multiline attributes.
+* Improve the accessibility of inserter items by providing aria-label attributes.
+* Clear selected block on canvas focus only if it is selected.
+* Avoid styling meta-boxes inputs to look like Gutenberg UI.
+* Use "perfect fourth" rule of typographic scale for heading display.
+* Inherit color styling on meta-boxes area.
+* Increase width of meta-boxes area.
+* Default to content-box box-sizing for the meta-box area.
+* Improve handling of transformations (backticks for Code and dashes for Separator) when pressing enter.
+* Expose combineReducer helper in data module.
+* Make it possible to override the default class name generation logic.
+* Remove edit-post styles from editor components.
+* Ignore mid-word underscores when pasting markdown text.
+* Add label element to the post title.
+* Improve block mover labels for speech recognition software.
+* Correct onChange handler in SelectControl component to support multi-value changes.
+* Make MediaUpload component extensible.
+* Improve display of color palette items (like white) by adding a subtle transparent inset shadow.
+* Ignore "Disable visual editor" setting to address case where Classic block would not load for the user.
+* Improve display of sidebar heights on mobile.
+* Update blockSelection reducer to clear selection when removing the selected block.
+* Show "no title" placeholder on the mobile sidebar when post title is empty.
+* Address case where cancelling edits on a shared block not discarding unsaved changes that have been made to that block.
+* Introduce new MenuGroup and MenuItem components and refactor for clarity.
+* Improve the block inserter UI on mobile by displaying the post title in a header above the search bar. Extends as optional support for all popovers.
+* Refactor media fetching to use the core data module. Shields from REST API specific nomenclature.
+* Add a label and a role to the block appender to make it discoverable by text readers.
+* Use up and down arrow icons for the meta boxes panels.
+* Hide reusable block indicator from the inserter preview.
+* Fix issue with embed placeholder breaking on reload.
+* Fix error when collapsing categories panel.
+* Fix case where inserting a block after removal inserts it at the top of the post.
+* Fix issue with Button block text wrap.
+* Fix bug with meta-boxes data collection that occasionally prevented them from showing.
+* Fix meta-box configuration persistence to be per postType.
+* Fix issue with multiple previews in Firefox by unsetting popup window upon close.
+* Fix scroll bleed when displaying modal UI on mobile.
+* Fix z-index issue with admin bar quick links and content structure tooltip.
+* Fix image href attribute matcher to not interfere with anchors inside the caption.
+* Fix help text position on toggle control and range control.
+* Fix centering of small videos.
+* Fix timezone conflicts when setting global moment default timezone.
+* Fix issue with getDocumentTitle and undefined titles.
+* Fix missing rerender of plugin area upon registration or unregistration.
+* Remove title from Table of Contents and warn user if theme doesn't support titles.
+* Prevent potential fatal error when registering shared block post type if a specific core user role has been removed.
+* Avoid collecting meta-box information on non-Gutenberg screens.
+* Update contrast checker to respect recent changes on Notice component.
+* Rename isProvisionalBlock action property to selectPrevious in removeBlock and removeBlocks functions.
+* Address issue with heartbeat dependency (only use when available).
+* Allow calling functions passed as props in the Fill.
+* Improve style handling and specificity of dashicon SVGs.
+* Unify "citation" translatable strings for quotes and pullquotes.
+* Clean up nomenclature inconsistencies in blocks and components modules.
+* Correct documentation example for withDispatch.
+* Update documentation on extending the editor via PluginSidebar and PluginMoreMenuItem.
+* Dynamically pick JS/CSS build files for plugin ZIP generation.
+* Copy improvements to documentation.
+* Attempt to avoid cases where hosts block certain HTTP verbs on wp-api.js requests. This is part of similar issues being exposed by Gutenberg being the first Core WordPress feature that makes significant use of the REST API.
+* Add a shim to override wp.apiRequest, allowing HTTP/1.0 emulation.
+* Update react-autosize-textarea package.
+* Update @wordpress/hooks to v1.1.6.
+* Use CustomTemplatedPathPlugin which was extracted and updated for Webpack 4.
+* Use wordpress/es6 ESLint config.
+* Add Gutenberg Hub to the resources.
+* Properly detect NVM path on macOS using homebrew.
+* Remove Cypress for E2E testing in favor of Puppeteer. Refactor all existing tests and integrations.
+* Remove deprecations slated for 2.5.0 removal.
+
+= 2.4.0 =
+
+* Show the full block inserter (+ button) to the left of empty paragraphs and the default appender. Quick block options (based on compound frequency and recency) remain on the right.
+* Insert default block as provisional — this reduces the proliferation of empty blocks as the editor removes these provisional blocks when unfocusing.
+* When pressing enter from post title, insert initial block as provisional.
+* Fade out the side inserter when typing on the newly created block.
+* Group common block definition on inserters. Use 'frecency' to sort items on top of it.
+* Improve the visual focus style for inbetween inserter.
+* Move isTyping behaviour to a separate component.
+* Inserting a block should only shift focus to a text field, otherwise focusing the block's "focus stop".
+* Example: Inserting an image should focus the top-level placeholder.
+* Pressing backspace or enter from the block's focus stop should respectively delete or insert a subsequent paragraph block.
+* Example: Pressing enter or delete on an image placeholder.
+* Pressing down arrow from a non-text-field should proceed with a tab transition as expected.
+* Multi-selection at the last text field in a block now accounts for non-contenteditable text fields.
+* Better internal identification of text fields for writing flow transitions. Previously, if a block contained a checkbox, radio, or other non-text input tags, they would be erroneously included in the writing flow sequence.
+* Inserting paragraph block (quote, etc; those with text fields) via autocomplete should move focus to the cursor.
+* Shift-arrow from a text field engages multi-selection, but not if there are other text fields in the intended direction in the same block.
+* Cancel isTyping state when focusing non text field.
+* Improve reliability of the block click-to-clear behavior.
+* When clicking below the editor move focus to last text field — this includes creating a new provisional block if last block is not text. This is equivalent to the default block appender spanning the entire viewport height of the editable canvas.
+* Introduce same undo buffering for general text to the post title (and other post properties).
+* Allow breaking out of List block upon Enter on last empty line.
+* Address conflicts between WritingFlow's selection transitioning and nested blocks by moving selection to the block's focus handler.
+* Improve reusable block creation flow by focusing the title field and allowing the user to name their block immediately.
+* Avoid calling callbacks on DropZone component if a file is dropped on another dropzone.
+* Improve settings UI on mobile devices.
+* Allow text to wrap within Button block.
+* Restrict Popover focusOnMount to keyboard interaction. This seeks to improve the experience of interacting with popovers and popover menus based on usability and accessibility concerns.
+* Optimize the behavior of subscribe to avoid calling a listener except in the case that state has in-fact changed.
+* Move the behaviors to transition focus to a newly selected block from the WritingFlow component to the BlockListBlock component.
+* Extract scroll preservation from BlockList as non-visual component
+* Add Upload button to audio and video blocks.
+* Refactor image uploads and added auto-filled captions using the image metadata.
+* Limit CSS rules for lists to the visual editor area.
+* Add aria-label to the post title.
+* Add new distinctive icon for Cover Image block.
+* Refactor PostTitle for easier select, deselect.
+* Use ifViewportMatches HoC to render BlockMobileToolbar as appropriate.
+* Introduce a new reusable Disabled component which intends to manage all field disabling automatically.
+* Expand editor canvas as flex region improving deselect behaviour.
+* Bump minimum font-size to 13px.
+* Allow emojis to be displayed in permalink visual component.
+* Respect HTML when readding paragraph-tags.
+* Allow undefined return from withSelect mapSelectToProps.
+* Update datepicker styling to inherit font-family/colour scheme.
+* Move QueryControls and expose them for general use under components module.
+* Address design issues with block dialog warnings on blocks that are too tall.
+* Preserve "More" order during block conversion.
+* Add capabilities handling for reusable blocks mapping to default roles.
+* Add a "Write your story" filter.
+* Return focus from Toolbar to selection when escape is pressed.
+* Improve keyboard interaction on inserter tab panels.
+* Simplify state management for the sidebar to make it easier to maintain.
+* Update cover image markup and CSS.
+* Fix sent parameter in onChange function of CheckboxControl.
+* Fix errors in some localized strings.
+* Fix problem with arrow navigation within Block Menu buttons.
+* Fix issue with demo page being marked immediately as unsaved (and the subsequent autosave).
+* Fix issue with a Reusable Blocks being keyboard navigable even when it is not supposed to be edited.
+* Fix focusable matching elements with "contenteditable=false".
+* Fix issue with empty paragraphs appearing after images when the images are inside an anchor.
+* Fix issue when a block cannot be removed after being transformed into another block type.
+* Fix issue with updating the author on published posts.
+* Fix edgecases in Windows high contrast mode.
+* Fix regression with inserter tabs colors.
+* Fix handling of HTML captions on gallery and image.
+* Fix heading subscript regression.
+* Resolve a performance regression caused by a bailout condition in our chosen shallow-equality library.
+* Handle calculateFrequency edge case on upgrading.
+* Use lodash includes in NavigableMenu to address IE11 issue.
+* Refer to reusable blocks as 'Shared Blocks'.
+* Add domain argument to localization functions. Allow setting locale data by domain.
+* Update localization functions to absorb errors from Jed.
+* Make UrlInput a controlled component.
+* Decode HTML entities in placeholders.
+* Only allow whitespace around URL when attempting to transform pasted Embeds.
+* Make preferences reducer deterministic.
+* Remove max-width for meta boxes area inputs.
+* Default to content-box box-sizing for the metabox area.
+* Adjust inside padding of meta boxes to better accommodate plugins.
+* Remove !important clauses from button styles.
+* Keep update button enabled when there are metaboxes present.
+* Clarify some inner workings of Block API functionality with comments.
+* Rewrite data document as a walkthrough of wordpress/data.
+* Revert the eslint --fix Git precommit hook.
+* Extract shared eslint config.
+* Add tests for the BlockSwitcher component.
+* Add test cases for REQUEST_POST_UPDATE_FAILURE effect.
+* Fail the build via ESLint error when deprecations marked for removal in a given version change are not removed.
+* Update redux-optmist to 1.0.0.
+* Update package-lock.json.
+* Remove Deprecated Features planned for this release and start documenting them in a deprecated document.
+
+= 2.3.0 =
+
+* Continue editing flow iterations by adding a line between blocks to insert new content — it also works within nested groups.
+* Add support for nested templates.
+* Allow duplicating a block through a menu button.
+* Automatically set a matching block as the default when a post format is set and the post is empty. This continues the path of matching blocks with post formats.
+* Add CodeMirror (core library) to the HTML block for syntax highlighting.
+* Simplify design presentation of editor header area for better consistency. (Add label for "Preview" action.)
+* Introduce new API for allowing plugins to register sidebars. ⭐ It allows plugins to further extend Gutenberg natively with non-content functionality. Note: the public facing functions are marked as experimental as they are being iterated in the context of the major extensibility work going on outside of blocks.
+* Improve the "invalid block" dialog by reducing the options and adding a new convert to blocks feature as we have solidified the transformations.
+* Allow adding images to a gallery without going through the media library.
+* Show the block appender even if the last block is non empty paragraph.
+* Show the side inserter on empty paragraphs within nested blocks.
+* Add a script that creates a PHP file based on a POT to make the plugin translatable.
+* Refactor float alignment to avoid margin calculations and simplify rendering.
+* Support registering and invoking actions in the data module.
+* Add hook to validate useOnce blocks.
+* Add viewport module. (Showing explorations with data module.)
+* Provide a fix for apiRequest in sites configured to use plain permalinks. (Reported several times!)
+* Remove specific grammar support for more tag as we consolidate the syntax and reduce weight.
+* Move filter for registering block types before validation happens.
+* Allow removing the selected image in a gallery block using backspace/delete keys.
+* Make saved blocks preview available to keyboard users.
+* Refactor reducer enhancers as higher-order reducer creators.
+* Refactor query HOC usage with withSelect.
+* Refactor API calls in Gutenberg to always use wp.apiRequest.
+* Register core blocks on init hook.
+* Removed DefaultBlockAppender when a template Lock exits.
+* Reduce and simplify float code.
+* Refactor and cleanup for the Ellipsis and More Menu components.
+* Add focus styles for Windows High Contrast mode.
+* Move meta boxes out of the generic editor module.
+* Make the "more" tag visible in the Classic block.
+* Expose ImagePlaceholder component in wp.blocks.
+* Rename TermTreeSelect to TreeSelect and move it to components.
+* Reuse isHorizontalEdge for RichText component and remove duplication.
+* Improve CSS for gallery caption and avoid UI shifts.
+* Use TreeSelect in HierarchicalTermSelector.
+* Flatten components modes directory organization.
+* Mutate editor store reference in middlewares application.
+* Consider term names as case insensitive.
+* Resolve an issue where removing a block which had contained inner blocks would not clear those inner blocks from state.
+* Make sure block usage is incremented (for calculating frequency and recency) when adding blocks with the side inserter.
+* Hide non editor specific notices, pending further improvements.
+* Update shortcode block icon.
+* Disable post format input if the theme does not support post formats.
+* Remove margin from initial insertion point and fix misalignment.
+* Polish header for mobile and accommodate other more languages.
+* Show taxonomies in the document inspector separately, uncoupling Categories & Tags.
+* Improve handling of block toolbar on mobile.
+* Fix issue with gallery images not cropping within link wrappers.
+* Fix bug in paragraph blocks affecting input behaviour when block is positioned on left or right.
+* Fix minor inconsistency with block margins and the default appender.
+* Fix description typo in freeform block.
+* Fix issue with focus transfering between citation and content.
+* Fix issue with floated block toolbar on adjacent floats.
+* Fix duplicate upload of media on drag.
+* Fix issue that prevented adding new rows or columns in Table block.
+* Fix issues with z-index and the sidebar.
+* Fix accessibility issues with mover icons.
+* Fix issue with default block replace resulting in incorrect order.
+* Fix sidebar tab padding.
+* Fix certain conflicts with markdown plugins.
+* Fix IconButton indent regression.
+* Fix issue with self embedding WP posts and the processing of the embed markup.
+* Fix extraction of _nx translation function.
+* Fix wp.data.query backwards compatibility with props.
+* Fix problem with delete key in empty contentEditables.
+* Resolve an issue with the data module's unsubscribe behavior which can result in a listener callback being invoked even after its been unsubscribed.
+* Remove the api-request JavaScript shim which had existed while WordPress 4.9 was in pre-release.
+* Remove explicit handling of "bottom reached" within writing flow as redundant.
+* Remove invalid reference to WeakMap polyfill.
+* Remove unused wpautop fixture files.
+* Remove non-functional custom taxonomies meta boxes.
+* Remove is- prefix from embed alignment class.
+* Switch get_locale() to get_user_locale().
+* Remove unnecessary $current_screen code.
+* Reduce duplication in 'No saved blocks' and 'No blocks found' component messages.
+* Include string extraction in production build.
+* Add deprecation helper functions for consistent messaging.
+* Improve string cast render test.
+* Add Gutenberg svg to docs.
+* Add documentation describing block transforms.
+* Add documentation for nested template definitions.
+* Add documentation for registering sidebar APIs. Move them to extensibility docs.
+* Update WordPress packages to the latest versions.
+
+= 2.2.0 =
+
+* Block Nesting is live! It comes with an experimental Columns block. (Note: converting a nested block into a reusable block is disabled on this first version.) Furthermore, this is not a specific implementation for columns alone — any block author can take advantage of defining nested areas.
+* Refined block insertion experience:
+* Introduce block shortcuts on every empty paragraph block. This also temporarily disables the sibling inserter as we work on refining this interaction.
+* Add trailing text area at the bottom of a post to continue writing.
+* Preview saved blocks while hovering on the inserter. Allows users to quickly see what they are inserting before inserting.
+* Enable triggering onChange events within RichText component on every keystroke. This was an enforced limitation that prevented saved post checks from being faithful.
+* Rework undo levels to use history "buffer" and leverage the mechanism to aid in continuous syncing of RichText history records.
+* Collapse the publish sidebar when making edits to a published post automatically.
+* Improve writing flow by triggering isTyping mode as soon as the user clicks on the default text appender.
+* Hide hover effects when typing.
+* Add a confirmation message before reverting a published post to draft.
+* When using the inserter, replace the selected block if it's empty.
+* Display reusable blocks in the "recent blocks" tab.
+* Make sure blue line indicators appear consistently when using dropzones.
+* Ensure that hitting enter at the end of a paragraph creates an empty paragraph when using RichText.
+* Ensure the block settings menu and the block movers are shown when the default block is selected and user is not typing.
+* Deselect individual gallery images when clicking outside the block or selecting another image.
+* Add support for setting a page template.
+* Add support for individual image captions in galleries.
+* Add support for saving a post with Cmd/Ctrl+S shortcuts. This is possible after these RichText changes.
+* Support unwrapped paragraph text via native block deprecation mechanism. (Ensures paragraphs without p tags are correctly interpreted.) Also readdresses code that was applying autop selectively on the server for posts made with gutenberg as it is handled at the block level when needed.
+* Add raw handling (pasting mechanism) for iframes (e.g. Google Maps).
+* Allow WP to make images responsive via class.
+* Drop focus/setFocus props in favor of isSelected prop.
+* New PlainText component for raw content that is styled as editable text. Renamed Editable to RichText for extra clarity and separation.
+* Add RawHTML component, drop support for HTML string block save.
+* Absorb multiple-image uploads in generic image placeholder component and reuse it for galleries.
+* Refactor Default Colors and the ColorPalette component. Moves the default colors to the frontend making the Editor script more reusable without the need of the server-side bootstraping.
+* Reimplement block alignment as a common extension.
+* Use block API functions in reusable block effects.
+* Check for duplication in addGeneratedClassName.
+* Assign default for all allowed blockTypes.
+* Update ToggleControl to pass boolean onChange.
+* Add withSafeTimeout higher-order component.
+* Expose getEditedPostAttribute selector.
+* Move selected block focus to BlockListBlock.
+* Allow themes to disable custom color functionality across blocks.
+* Added slug selector to data modules collection.
+* Defer registration of all core blocks until editor loads. Generally useful for extensibility hooks.
+* Add a subscribe function to the editor data module. Also, separate reducers into multiple stores to avoid unallowed access to the actions.
+* Support multiple stores in data module for the redux dev tools.
+* Expose registered selectors as functions.
+* Remove Popover isOpen prop, render by presence.
+* Fix issue with store persistence and switching to fixed toolbar.
+* Fix issue with formatting toolbar hover.
+* Fix block menu render when multi-selecting.
+* Fix TinyMCE custom buttons width in Classic block.
+* Fix sidebar tab admin theme regression.
+* Fix center alignment on resized images.
+* Fix some float issues.
+* Fix type error when merging blocks.
+* Fix regression when converting gallery from shortcode.
+* Fix unset variable in meta-boxes functions.
+* Fix code error in blocks-control.md.
+* Fix loss of focus when navigating from multi-selection.
+* Fix scrollbars on blank preview loading screen.
+* Fix broken nested lists and Evernote test in pasting functionality.
+* Fix lingering dropzone placeholder at the end of the editor.
+* Fix Button block line break presentation.
+* Fix lingering visual editor classes.
+* Fix codepen embeds width.
+* Fix merging blocks after nested blocks refactoring.
+* Fix Cypress path checks to allow sub-directory.
+* Fix error when pasting image inside caption.
+* Fix some issues when pasting from Word.
+* Fix bug when pasting content with custom styles in a paragraph block.
+* Fix image caption select behaviour.
+* Fix broken nested content caused by overly aggressive cache.
+* Fix issue with comments and pingbacks being set to off on new posts.
+* Fix regression with RichText placeholder whitespace.
+* Fix incorrect directory to load text domain.
+* Fix issue with quote to heading transformation.
+* Fix focus transfer between citation and content.
+* Fix gallery link attribute selector.
+* Attempt to correct Slack's Markdown code block variant.
+* Disable customClassName support on Classic block.
+* Avoid autofocus behavior for blocks without focusable elements.
+* Ignore focus if explicitOriginalTarget is not node (Firefox issue).
+* Extract "edit-post" to its own module — this is preparation work for the eventual template editor in v2 onwards.
+* Remove redundant handling of inserter position, simplifying the implementation for nesting.
+* Prioritize specific block handling over generic shortcode catch-all transform.
+* Avoid running a full-parse when rendering a post, instead only intercepting dynamic blocks to handle their callbacks.
+* Ensure string return value from render_callback.
+* Avoid parameters in memoized selectors getDependants.
+* Guard against falsey block container in WritingFlow.
+* Refactor BlockList to use minimal block UIDs array.
+* Pass selection start as UID in BlockList to prevent unnecessary rerenders.
+* Refactor TableOfContents panel to separate component for performance improvements.
+* Restore new post setup as non-dirtying change. This resolves an issue where saving a new post which has an empty title will set the title as "Auto Draft".
+* Center spinner when images are loading in the gallery block.
+* Use isTypingInBlock to avoid unnecessary block rerenders.
+* Add the i18n messages to the built plugin.
+* General design improvements to the full-post code editor. Also removes the dummy quicktag buttons that were non-functional.
+* Only start multi selection from inside the content.
+* Cache columns layouts configurations.
+* General polish to the Classic block and some quote block style errors.
+* Remove wrapper from image raw transform and added tests.
+* Make sure reusable blocks models exist before initializing.
+* Persist withFocusOutside event for async usage.
+* Pass selected block UID as string on WritingFlow.
+* Add label to range control.
+* Remove throttling inputs on RichText.
+* Replace global hover state with local component state. This reduces excesive dispatching of mouse events.
+* Simplify Editor State initialization using a single action to fix undo/redo initialization.
+* Access state paths directly in selector dependants for getBlock.
+* Refactor insertion point to include rootUID and layout.
+* Set new post status to draft in initialization.
+* Strip comment demarcations in content filtering for the front-end after refactoring work.
+* Improve presentation of List block.
+* Optimize getMultiSelectedBlocks by returning shared array reference in empty multi-selection.
+* Increase maximum number of recent blocks to nine in order to accommodate the current design.
+* Avoid cases of rerendering when the previous or next block updates.
+* Restore missing selectionStart props in BlockList.
+* Improve edit and insert link label display.
+* Extract copy and scroll-into-view logic to separate non-visual components in BlockList.
+* Make sure that styles do not contain duplicates in development mode.
+* Use trivial block count check to determine emptiness.
+* Use proper labels provided by the rest API on taxonomies.
+* Use menu order to order pages in the parent page dropdown.
+* Persist link attribute to fix invalid galleries.
+* Update the Dashicons component with new icons.
+* Use correct label on Featured Image Panel.
+* Small improvement to the meta-box partial page file.
+* Delete unused global import in gutenberg_menu function.
+* Improve serialize persistence action name.
+* Improve logic around replacing the editor in PHP.
+* Improve consistency of tooltips text.
+* Improve sandbox component readme.
+* Improve gutenberg_intercept_* functions.
+* Improve "Add New" button logic.
+* Revert updates giving Meta Boxes' #poststuff div a broader scope.
+* Simplify "New Post" button logic.
+* Simplify scripts registration.
+* Replace focus with isSelected verification on hooks.
+* Automate memoized selector setup clear.
+* Consolidate module build JS, CSS, map inclusion.
+* Remove unused code after WP 4.9.
+* Update deprecated BlockDescription in Subhead.
+* Add doc explaining the deprecated block API. (Handbook.)
+* Add doc for Editable component (now RichText).
+* Document block validation, clarify extensibility validation.
+* JSDoc: prefer @return over @retuns.
+* Integrate dependencies from WordPress packages. Brings wp-scriptsinto gutenberg.
+* Move components in wp.blocks.InspectorControls to wp.components.
+* Add lint:fix ESLint "fix" npm script.
+* Add an eslint --fix Git precommit hook.
+* Add reusable block render tests.
+* Add tests for ContrastChecker component.
+* Add more details about unit testing JavaScript code.
+* Add mention to create-guten-block repo.
+* Add partial test coverage to RichText component.
+* Add first version of repository management doc.
+* Assign preferred JSDoc tags and types.
+* Assign edit-post global as wp.editPost.
+* Assign explicit user for Docker WordPress install in tests.
+* Mention installing docker-compose in local dev setup.
+* Update refx to version 3.x.
+* Update memize and rememo dependencies.
+* Code is Poetry footer to main readme.
+
+= 2.1.0 =
+
+* Iterate on the design of up/down arrows and how focus is managed. This seeks to further reduce the visual and cognitive weight of the up/down movers.
+* Show immediate visual feedback when dragging and dropping images into the editor. (Expands on the previous release work.)
+* Expose state through data module using selectors. This is an important piece of the extensibility puzzle.
+* New button outline and focus styles.
+* Show original block icon after converting to reusable block. Also hides the generic reusable block from inserters. This moves data logic out of the inserter.
+* Introduce a migration function for block versioning.
+* Add HTML handler to dropzone. Allows drag and dropping images from other web pages directly.
+* Trigger typing mode when ENTER or BACKSPACE are pressed. This improves the writing flow but engaging the UI-less mode more frequently.
+* Added ability to align the text content of a cover image to the right, left, or center of the image.
+* Refactor CopyContentButton as a core extension to illustrate how to add functionality to the editor outside of blocks.
+* Allow collapsing/sorting meta-boxes panels.
+* Remove dirty-checking from meta-boxes state, fixes issues with default values and updating certain text fields.
+* Defer registration of all core blocks until editor loads. Improves ability to hook into registerBlockType.
+* Only trigger select block action when block is unselected.
+* Try new markup for Galleries using lists.
+* Try new subheading editorial block.
+* Reduce sibling inserter initial height.
+* Force an update when a new filter is added or removed while using withFilters higher-order component. This improves the rendering flow of filters.
+* Refactor the MediaUploadButton to be agnostic to its rendered UI.
+* Change "size" label to "level" in Heading block settings.
+* Remove breaking spaces logic on List block.
+* Update progress button color state based on theme used.
+* Update Video block description.
+* Refactor the multi-selection behavior to dispatch the multi-selection start action only after the cursor begins to move after a mousedown event.
+* Avoid persisting mobile and publish sidebars.
+* Move drag handling to instance-bound handler.
+* Remove "Open in new window" link option.
+* Use username slug instead of name and remove ephemeral link from it.
+* Ensure isLoading set to false after request error.
+* Allow copying individual text from a block that is not purely text without copying the whole block.
+* Match consistency of tooltip text with Classic Editor.
+* Fix issue with Lists having additional lines when used in a reusable block.
+* Fix errors when adding duplicate tags.
+* Fix inconsistency with applyOrUnset().
+* Fix incorrect display when loading a saved block with no content.
+* Fix issue where black rectangle would briefly blink on new paragraphs.
+* Fix cursor jumps in link-editing dialog.
+* Fix post content validation.
+* Fix scrolling issues around nav menus.
+* Remove Vine embed support as it's no longer supported.
+* Ensure editor still exists after timeout.
+* Add regression check for block edit interface using snapshots.
+* Add missing alt attributes to image (and gallery) blocks when alt returns an empty value.
+* Better build tools with Docker.
+* Register Gutenberg scripts & styles before enqueuing.
+* Force wp-api.js to use HTTP/1.0 for better compatibility.
+* Avoid the deprecated (from 5.0 to 5.2) is_a() function.
+* Remove unused dependency.
+* Update contributing instructions with steps.
+* Consistency cleanup in doc return statements.
+* Include how to assign a template to a default Post Type in the documentation. Also add more context to the code.
+* Improve incremental development build performance by only minimizing -rtl files for production builds.
+* More JSDoc fixes.
+* Remove warning from plugin header.
+* Add new page explaining how to create a block using WP-CLI.
+* Add security reporting instructions.
+* Improve useOnce documentation.
+* Bump copyright year to 2018 in license.md.
+* Disable Travis branch builds except for master.
+
+= 2.0.0 =
+
+* Replace publish dropdown menu with a sidebar panel.
+* Expand latest post blocks with more querying options — order by and category.
+* Allow dragging multiple images to create a gallery.
+* Improve markdown pasting (allows lists to be interpreted).
+* Allow pasting copied images directly.
+* Pasting within lists and headings.
+* Improve handling of inline spans.
+* Allow copying a single block.
+* Make sure inline pasting mechanism does not take place if pasting shortcodes.
+* Preserve alignment classes during raw transformations (like pasting an old WordPress post).
+* Support shortcode synonyms.
+* Allow continued writing when pressing down arrow at the end of a post.
+* Mobile design: move block controls to the bottom of a block.
+* Allow deleting reusable blocks globally.
+* Display description and type on the sidebar. (Also replace BlockDescription component with a property.)
+* New table of contents and document counts design.
+* Add button to copy the full document quickly.
+* Expand inserter to three columns and a wider container.
+* Allow using down-arrow keys directly to navigate when searching a block in the inserter.
+* Deselect images in Gallery block when losing focus.
+* Include post title in document outline feature.
+* Rework display of notices and address various issues with overlaps.
+* Added keyboard shortcut to toggle editor mode. Also displays the relevant keyboard combination next to the menu item.
+* Improve deleting empty paragraphs when backspacing into a block that has no merge function (example, deleting a paragraph after an image).
+* Improve the way scroll-position is updated when moving a block.
+* Show block transformations in ellipsis menu.
+* Add drag and drop support for cover image.
+* Allow transforming operations between Heading and Cover Image blocks.
+* Add focus outline for blocks that don't have focusable fields.
+* Allow both navigation orientations in NavigableContainer.
+* Improve the behavior of focusing embed blocks.
+* Unify UI of audio and video blocks.
+* Show message on the inserter when no blocks are found.
+* Show message when no saved blocks are available.
+* Do not show the publish panel when updating / scheduling / submitting a post.
+* Update quote style in front-end.
+* Convert text columns to a div using grid layout.
+* Update button block CSS and add class to link.
+* Allow text in Button block to wrap.
+* Prevent useOnce blocks from being inserted using the convenient blocks shortcut menu.
+* Show correct symbol (⌘ or Ctrl) depending on system context.
+* Rename "insert" to "add" in the UI.
+* Clear block selection when opening sibling or bottom inserter.
+* Always show the insertion point when the inserter is opened.
+* Increase padding on "more options" block toggle.
+* Rename "Classic Text" to "Classic".
+* Improve display of dotted outline around reusable blocks.
+* Updated messages around reusable blocks interactions.
+* Align both the quote and the citation in the visual editor.
+* Exit edit mode when unfocusing a reusable block.
+* Set floated image width (when unresized) in % value.
+* Add withState higher-order component.
+* Initial introduction of wp.data module.
+* Restrict the state access to the module registering the reducer only.
+* Refactor PostSchedule to make Calendar and Clock available as reusable components.
+* Allow overwriting colors (defaults and theme provided) when consuming ColorPalette component.
+* Switch orientation of popover component only if there is more space for the new position.
+* New ImagePlaceholder reusable component that handles upload buttons and draggable areas for the block author.
+* Add speak message when a category is added.
+* Announce notices to assertive technologies with speak.
+* Add aria-labels to Code and HTML blocks.
+* Warn if multiple h1 headings are being used.
+* Add speak message and make "block settings" button label dynamic.
+* Make excerpt functionality more accessible.
+* Add various headings around editor areas for screen-readers.
+* Improve accessibility of menu items in the main ellipsis menu.
+* Add missing tooltips to icon buttons.
+* Render toolbar always by the block on mobile.
+* Improve performance of responsive calculations using matchMedia.
+* Avoid shifts around toolbar and scrolling issues on mobile.
+* Improve how the fixed-to-block toolbar looks on mobile. Change how the fixed position toolbars behave, making them sticky.
+* Prevent Mobile Safari from zooming the entire page when you open the inserter.
+* Initial explorations to migrate to server-registered blocks as part of raising awareness of available blocks.
+* Move supportHTML property into the general "support" object.
+* Replace getLatestPosts usage with withAPIData HOC.
+* Convert all filters for components to behave like HOCs (withFilters).
+* Replace flowRight usage with compose for HOCs.
+* Apply filters without function wrappers.
+* Improve Tags/Categories response size by limiting the requested fields.
+* Limit requested fields in category feature of "latest posts".
+* Request only required post fields in latest posts.
+* Replace getCategories usage with withAPIData component.
+* Don't show fields that are not used in media modal when adding a featured image.
+* Polish inserter tabs so the focus style isn't clipped.
+* Make inspector controls available when categories are loading.
+* Improve overlay over meta-boxes during save operations.
+* Hide excerpts panel if not supported by the CPT.
+* Hide Taxonomies panel if no taxonomy is available for the current CPT.
+* Hide several other panels when the CPT doesn't support them.
+* Use _.includes to find available taxonomies. Mitigates non-schema-conforming taxonomy registrations.
+* Defer applying filters for component until it is about to be mounted.
+* Prevent "Add New" dropdown from overriding other plugin functionality.
+* Improve paragraph block description.
+* Refactor to simplify block toolbar rendering.
+* Add missing aligment classes to cover image.
+* Add parent page dropdown to page attributes panel.
+* Allow pressing ENTER to change Reusable Block name.
+* Disable HTML mode for reusable blocks.
+* Add support for the "advanced" meta-box location.
+* Make sure super admins can publish in any site of the network.
+* Rename theme support for wide images to align-wide.
+* Move selectors and actions files to the store folder.
+* Center arrows of popovers relative to their parent.
+* Use fainter disabled state.
+* Add breakpoint grid to latest posts block and update color of date.
+* Move logic for auto-generating the block class name to BlockEdit.
+* Respect the "enter_title_here" hook.
+* Prevent meta-box hooks from running multiple times.
+* Don't set font-family on pullquotes.
+* Remove superfluous parentheses from include statements.
+* Remove redundant CSS property updates.
+* Use "columns-x" class only for grid layout in latest posts.
+* Use flatMap for mapping toolbar controls for a small performance gain.
+* Introduce jest matchers for console object.
+* Updated various npm packages; update Jest. Update node-sass. Update WordPress packages.
+* Switch TinyMCE to unpkg.
+* Reorganize handbook docs navigation.
+* Added FAQ section for meta-boxes compatibility.
+* Added initial "templates" document.
+* Add documentation about dynamic blocks.
+* Updated "outreach" docs.
+* Improve block-controls document.
+* Display a hint that files need to be built.
+* Add WordPress JSDoc ESLint configuration.
+* Update licenses in package.json & composer.json to adhere to SPDX v3.0 specification.
+* Add tests to cover REQUEST_POST_UPDATE_SUCCESS effect.
+* Add tests for color palette component.
+* Add tests for Editable.getSettings and adaptFormatter.
+* Use newly published jest-console package in test setup.
+* Update info about test fixtures generation.
+* Also style footer in quote blocks to ensure backwards compatibility.
+* Add a PHPUnit Docker Container.
+* Fix wrong "return to editor" link when comparing revisions.
+* Fix error when pressing enter from a heading block.
+* Fix error with merging lists into paragraphs.
+* Fix revisions button target area.
+* Remove duplicated styles.
+* Fix z-index rebase issues.
+* Fix tag name warning ordering in validation.
+* Fix text encoding of titles in url-input.
+* Fix endless loop in reusable blocks code.
+* Fix edit button in Audio block using invalid buttonProps attribute.
+* Fix block creation with falsey default attribute.
+* Fix radio control checked property.
+* Fix styling issues of blocks when they are used as part of a reusable block.
+* Fix list wrapping issues.
+* Fix problem when converting shortcodes due to sorting.
+* Fix issue with time-picker not working.
+* Fix hide advanced settings interaction in block menu.
+* Fix issue with url input on images.
+* Fix style regression in textual placeholder on cover image.
+* Fix return type hint in gutenberg_get_rest_link().
+* Fix bug when changing number of Latests Posts rapidly was leading to some numbers being defunct.
+* Fix isInputField check and add tests.
+* Fix unsetting block alignment flagging block as invalid.
+* Fix CSS bleed from admin-specific gallery styles.
+* Fix image handlers at the top from being unclickable.
+* Fix unexpected keyboard navigations behaviour on some nodes.
+* Fix inserter position for floated blocks.
+* Fix bug on empty cover image placeholder used on a saved block.
+* Fix errors when adding duplicate categories.
+* Fix broken custom color bubble in ColorPalette.
+
+= 1.9.1 =
+
+* Fix error in Safari when loading Gutenberg with meta boxes present.
+* Fix error / incompatibility with Yoast SEO Premium terms display.
+* Resolve incorrect modal and tooltip layering.
+* Remove unintended commas from Page Options content.
+
+= 1.9.0 =
+
+* Introducing reusable global blocks. (Stored in a wp_blocks post type.)
+* Add ability to lock down the editor when using templates so edits can happen but blocks can't be removed, moved, nor added.
+* Handle and upgrade deprecated blocks. This allows to migrate attributes without invalidating blocks and an important part of the block API.
+* Drag and drop upload support to gallery block.
+* Extensibility:
+* Expose packages/hooks public API under wp.hooks.
+* Introduces withFilters higher-order component to make component filtering easier.
+* Introduces getWrapperDisplayName helper function to make debugging React tree easier.
+* Introduces compose function to unify composing higher-order components.
+* Exposes hook for Block component.
+* Updated demo post with a nicer presentation for people to test with.
+* Added automated RTL support.
+* Convert unknown shortcodes to Shortcode block when pasting.
+* Avoid splitting blocks during rich text pasting.
+* Disable block selection when resizing image.
+* Prefetch meta-boxes and don't reload them on save.
+* Support for all admin color schemes.
+* Close sidebar when resizing from non mobile breakpoints to mobile sizes.
+* Apply content autop disabling filter before do_blocks. Also fixes case where server-side rendered blocks produce extraneous whitespace in output.
+* Use cite element instead of footer for quote and pull-quote source markup.
+* Respect recency order when displaying Recent blocks.
+* Update the behavior of notices reducer to respect ID as a unique identifier, removing duplicate entries.
+* Improve quote to paragraph transformations. Fixes cases where quote would be split into two.
+* Use two flex rows instead of one wrapped row in Url modal for cleaner and more consistent display.
+* Avoid restricting endpoints to /wp/v2 in withApiData.
+* Remove duplicated and simplify inserter between blocks styles.
+* Remove unnecessary padding on top of editor when fixed toolbar is off.
+* Avoid intercepting rendering of removed meta boxes.
+* Replace redux-responsive with a simpler custom alternative, fixing a bug with IE11.
+* Fix issues with bullet-point positioning affecting block display.
+* Fix meta attributes selector not returning the correct value if edited.
+* Fix inconsistent animation on settings button.
+* Fix style issues on Custom HTML block's toolbar.
+* Fix broken styles in "edit as HTML" mode.
+* Fix image block description when no image is set.
+* Fix horizontal overflow for selects with long names in sidebar.
+* Fix case where link modal closes upon typing into UrlInput when toolbar is docked to the paragraph.
+* Fix webpack config issue on Node 6.
+* Fix issue with vertical arrow keys leaking to horizontal menu when toolbar is fixed to block.
+* Fix keyboard trap in the form token component and improve accessibility.
+* Fix React warning when saving reusable blocks.
+* Fix issue with horizontal arrow key closing link dialog in fixed toolbar mode.
+* Fix image resize handlers in RTL mode.
+* Prevent "Add New" dropdown from overriding other plugin functionality.
+* Split Sass variables file into multiple files.
+* Updated blue links for better contrast.
+* Resolve notice when template variable is not set.
+* Added unit tests for row panel, color panel (snapshot), and warning components.
+* Add unit tests for editor actions (with further cleanup).
+* Added snapshots tests for BlockControls.
+* Added documentation for Editable component.
+* Avoid caching vendor directory in Travis.
+* Add document on snapshot testing.
+* Add node and npm version check before build gets started.
+* Update cypress and use the newly introduced Cypress.platform functionality.
+* Improve composer.json setup.
+* Improve testing overview document.
+
+= 1.8.1 =
+
+* Add ability to switch published post back to draft.
+* Fix issue with when changing column count in "text columns" block.
+* Prioritize common items in the autocomplete inserter.
+* Avoid changing publish/update button label when saving draft.
+* Add bottom padding to the editor container to improve experience of writing long posts.
+* Adjust the Classic block toolbar so it's doesn't jump.
+* Colorize the little arrow on the left of the admin menu to white to match body content.
+* Abort focus update when editor is not yet initialized.
+* Update autocomplete suggestions colors to have a sufficient color contrast ratio.
+
+= 1.8.0 =
+
+* Introduce block-templates as a list of blocks specification. Allows a custom post type to define a pre-configured set of blocks to be render upon creation of a new item.
+* New tools menu design, preparing the way for more extensibility options.
+* Block API change: use simpler JS object notation for declaring attribute sources.
+* Add function to allow filtering allowed block types.
+* Show popovers full screen on mobile, improving several mobile interactions.
+* Began work on publishing flow improvements with an indication of publishing (or updating a published post) action by introducing a button state and label updates.
+* Made docked-toolbar the default after different rounds of feedback and testing. Both options are still present.
+* Provide mechanism for plugin authors to fallback to classic editor when registering meta-boxes. Also includes the ability to disable a specific meta-box in the context of Gutenberg alone.
+* Updated color pickers with color indications and collapsible panels.
+* Update icon and tooltip for table of contents menu.
+* Added contrast checker for paragraph color options.
+* Improve pasting plaintext and shortcode data.
+* Convert unknown shortcode into shortcode block when pasting.
+* Updated notices design and positioning.
+* Move the URL handler when pasting to the raw handler mechanism.
+* Define custom classNames support for blocks using the new extensibility hooks with opt-out behaviour.
+* Add reusable blocks state effects.
+* Remove sibling inserter from inside multi-selection blocks.
+* Image block alt text enhancements.
+* Increase minimum width and height of resized images.
+* Allow using escape key to deselect a multi-selection.
+* Preserve settings when rebooting from crash.
+* Improve structure of store persist mechanism.
+* Extract reusable BlockList component to allow nesting compositions.
+* Extract BlockToolbar, BlockMover, BlockSwitcher, PostTitle, WritingFlow, TableOfContents, Undo/Redo Buttons, MultiBlockSwitcher, PostPublishWithDropdown, KeyboardShortcuts, DocumentOutlineCheck, PostTrashCheck, Notices, as reusable components.
+* Consolidate block naming requirements.
+* Avoid persisting sidebar state on mobile devices.
+* Ensure backwards compatibility to matchers syntax.
+* Show untitled posts as (no title) in url auto-complete.
+* Extract fixedToolbar as a prop of BlockList.
+* Restore insertion point blue line.
+* Display outline tree even if only one heading is used.
+* Allow media upload button to specify a custom title (and fix grammar issue).
+* Fix issue with block mover showing on top of url input.
+* Fix case where tooltips would get stuck on buttons.
+* Fix transformations between quote and list blocks.
+* Fix issue with converting empty classic text to multiple blocks.
+* Fix issue with audio block not updating the toolbar area.
+* Fix contrast issues in button block.
+* Fix change detection to maintain multiple instances of state.
+* Fix text columns focus style.
+* Fix embed category example in docs.
+* Fix button link modal not closing.
+* Fix styling issue with sibling inserter.
+* Fix alignment of block toolbar in wide and full-width.
+* Fix issue when inserting image with empty caption.
+* Fix issue with sibling inserter not appearing in IE11.
+* Fix issue when inserting pullquotes.
+* Fix horizontal scrollbar when floating images to the left.
+* Fix alignment issue with embed videos.
+* Drop withContext optional mapSettingsToProps and fix issue when inserting new image.
+* Require @wordpress import path for application entry points.
+* Resolve errors in IE11 when using the inserter.
+* Added tests for Notice and UrlInput components.
+* Added tests for DefaultBlockAppender.
+* Log debugging messages for invalid blocks.
+* Reduce build size significantly by fixing import statements.
+* Update re-resizeable dependency.
+* Initial document page for extensibility purposes.
+* Added documentation for Editable component.
+* Move all components related to the specific post-edit page into its own folder.
+* Introduce snapshots for testing.
+
+= 1.7.0 =
+
+* Add toggle to switch between top-level toolbar and toolbars attached to each block. We have gotten great feedback on the benefits of both approaches and want to expand testing of each.
+* Ability to transform multiple-selected blocks at once — multiple images into a gallery, multiple paragraphs into lists.
+* Add @-mention autocomplete for users in a site.
+* Add data layer for reusable blocks and wp_blocks post type name.
+* Allow pasting standalone images and uploading them (also supports pasting base64 encoded images).
+* Allow block nesting from a parser point of view. This is the foundation for handling nested blocks in the UI.
+* Full design update to focus styles around the UI.
+* Block Extensibility (Hooks): filters may inspect and mutate block settings before the block is registered using hooks available at wp.blocks.addFilter. Testing with internal functionality first.
+* Moved docs to https://wordpress.org/gutenberg/handbook/
+* Refactor "changed post" functionality into higher order component and fix issue with wrongly reporting unsaved changes.
+* Refactor meta-boxes to render inline, without iframes.
+* Disable auto-p for block based posts, solving various issues around conflicting paragraph structures, freeform content, and text blocks.
+* Placed "table of contents" button in the header area and disable when there are no blocks in the content.
+* Redesigned the button block with inline URL field.
+* Improve performance by refactoring block-multi-controls out of VisualEditorBlock.
+* Replace react-slot-fill with our own first-party implementation. Part one, and part two for better handling of event bubbling within portals.
+* Improve autocomplete behaviour by using focus outside utility. This solves an issue with selecting items on mobile.
+* Capture and recover from application errors, offering the option to copy the existing contents to the clipboard.
+* Expose editor reusable components. These will allow editor variations to be constructed with more ease.
+* Add polyfill for permalink_structure option to wp-json. (Corresponding trac ticket.) Several REST API compat issues are going to be addressed like this. This allows Gutenberg to implement permalink editing.
+* Unslash post content before parsing during save, fixing bugs with block attributes.
+* Keyboard navigation overhaul of the inserter with accessibility improvements (accessing tabs, etc).
+* Add paragraph count to table of contents element.
+* General Navigable family of components.
+* Add contrast checker message when color combinations are hard to read.
+* Add "no posts found" message to latest posts block.
+* Improve color highlight selection and browser consistency.
+* Add aria-expanded attribute to settings button.
+* Add loading message to preview window.
+* Extract PostFeaturedImage, PostLastRevision, PostComments, PostTaxonomies, PageAttributes, PostTextEditor, BlockInspector, into reusable modules.
+* Collapse advanced block controls by default.
+* Update max number of columns when removing an image from a gallery.
+* Prevent the post schedule component from having invalid dates.
+* Make sure the inspector for a gallery block is shown when it has just one image.
+* Accessibility improvements for inline autocomplete components.
+* Update caption color for contrast.
+* Update visual display of the "remove x" button on gallery-items.
+* Improve classic block toolbar display and behaviour.
+* Dismiss tooltip when clicking a button or when wrapper node becomes disabled.
+* Restore block movers on floated items.
+* Add spacing around date and label.
+* Adjust raw handler "mode" option for readability.
+* Improve e2e testing performance.
+* Add fixture for undelimited freeform block.
+* Hold jQuery ready only when there are metaboxes and ignore advanced ones.
+* Make sure image size values are integers.
+* Fix floated gallery styles in the front-end.
+* Fix issue with image block not loading properly.
+* Fix issue with missing function in IE11.
+* Fix transformation of empty images into gallery and back.
+* Fix overflow issues on mobile.
+* Fix accidental block hover on iOS.
+* Fix toolbar state issue with slot-fill utility.
+* Fix case of too many undo levels building up.
+* Fix stylesheet load ordering issue.
+* Prevent input events from URLInput from being captured by Editable.
+* Force onChange to be updated with TinyMCE content before merge.
+* Polish heading toolbar buttons.
+* Remove image resizing on mobile.
+* Remove findDOMNode usage from Autocomplete component.
+* Rename references of rawContent as innerHTML.
+* Add tests and handle empty fills in slot-fill.
+* Add tests for block mover.
+* Add multi-select e2e test and fix issue with escape key.
+* Bump node version to active LTS.
+* Update TinyMCE to 4.7.2, fixing several bugs like toolbar flickering, visible placeholders when there is text, navigation breaks when encountering format boundaries, typing in FF after starting a bullet-list.
+
+= 1.6.1 =
+
+* Handle pasting shortcodes and converting to blocks.
+* Show loading message when opening preview.
+* Fix inline pasting (auto-link feature).
+* Fix undoing multi-selection delete operation.
+* Remove focus state after a selection is finished during multi-select.
+* Remove the "command" shortcut to navigate to the editor toolbar.
+
+= 1.6.0 =
+
+* Move the block toolbar to the editor's top header. This experiment seeks to reduce the presence of UI obscuring content.
+* Alternate style for block boundaries and multi-selection. Also engages "edit" mode when using arrow keys (hides UI).
+* Complete rework of arrow keys navigation between blocks—faster, clearer, and respects caret position while traversing text blocks.
+* Added keyboard shortcuts to navigate regions.
+* Implement multi-selection mode using just arrow with shift keys and support horizontal arrows.
+* Suggest a post format for additional blocks (embeds, gallery, audio, video) and expand on the heuristics to include case of one format-block at the top plus a paragraph of text below as valid.
+* Allow converting a classic block (post) into several Gutenblocks.
+* Several performance improvements 🎉
+* * Avoid re-rendering all blocks on selection changes.
+* * Add memoization for multi-select selectors.
+* * Rework implementation of blockRef to avoid render cascade from block list.
+* * Use flatMap when allocating the block list for rendering.
+* * Reorganize logic to determine when a post can be saved to be less expensive.
+* Refactor handling of revisions to avoid loading them up-front, significantly reducing load time on long posts with many revisions.
+* Further memoization on selectors based on specific state keys.
+* Render meta-boxes as part of the main column, not as a collapsible box.
+* Improve handling of undo action stack by resetting only on setup. This makes undo a lot more usable in general.
+* Changes to block inserter design positioning tabs at the top. (1.5.1)
+* Remove multi-select buffer zone and throttle delay for a faster response.
+* API for handling custom formats/tokens in Editable.
+* Improve withApiData component to be able to serve cached data (if available) during an initial render.
+* Show block toolbar in HTML mode for mobile.
+* Update Shortcode block to use a textarea instead of single line input.
+* Increase width of invalid block message.
+* Avoid redirecting to Gutenberg when saving on classic editor. (1.5.2)
+* Don't show "edit as HTML" for the Code and Shortcode blocks.
+* Refactor notices state reducer as array optimizing performance.
+* Disable front-end styles for basic quote block.
+* Reorganize the meta-boxes components for code clarity.
+* Extract reusable PostSticky, PostFormat, PostPendingStatus, PostAuthor, PostTrash, PostExcerpt components.
+* Resolve issue with having to tab twice on the toolbar due to focusReturn utility interfering with button tooltips.
+* Reset min-width of Tooltip component.
+* Avoid function instantiation in render of WritingFlow component.
+* Add the gutenberg_can_edit_post_type filter for plugins to add or remove support for custom post types.
+* Update header toolbar keyboard navigation to include undo and redo buttons.
+* Don't show the classic editor dropdown on unsupported post types.
+* Drop resizable-box in favor of re-resizable to use in the image block resize handlers.
+* Correct placement of link-dialog after moving toolbar to the top.
+* Adjust revisions logic to link to latest entry.
+* Allow editable to accept aria attributes.
+* Add generic focus effect to popovers.
+* Remove unused focus prop from Button component.
+* Remove core namespace from demo content.
+* Enable iOS smooth scrolling within scroll containers.
+* Make sure link menu appears above sibling inserter.
+* Improve layout paneling for short-height viewports.
+* Fix problem with multi-select not working again after a group of blocks has been moved.
+* Fix problem with deleting a block in HTML mode.
+* Fix issue with keyboard navigation entering textareas (non contentEditable) and losing caret position.
+* Fix issue where clicking on an item within autocomplete would dismiss the popover and not select anything.
+* Fix visual issue with the document info popover. (1.5.2)
+* Fix bug with deleting featured image on a post.
+* Fix error with removing a block placeholder.
+* Fix problem with FF and meta-boxes.
+* Fix issue with Classic Text description showing all the time.
+* Fix issue with the color picker width.
+* Fix quick inserter display of custom block icons.
+* Fix missing node check when blurring a paragraph block.
+* Warn about misuses of z-index mappings.
+* Make use of the "build stages" feature in the travis config file.
+* Upgrade ESLint dependencies.
+* Move test configuration files to test/unit.
+* Add easy local environment setup and Cypress e2e tests.
+
+= 1.5.2 =
+
+* Add the `gutenberg_can_edit_post_type` filter for plugins to add or remove support for custom post types.
+* Fix Classic Editor redirecting to Gutenberg when saving a post.
+* Fix Classic Editor dropdown showing on post types that don't support Gutenberg.
+* Fix Classic Editor dropdown hiding behind notices.
+* Fix an issue with collapsing popover content.
+
+= 1.5.1 =
+
+* New design for the inserter with tabs at the top and more space for text.
+* Fix problem with Firefox and the meta-boxes resize script.
+* Fix issue with Classic Text description showing without focus.
+
+= 1.5.0 =
+
+* Set Gutenberg as the default editor (still allow creating new posts in Classic Editor).
+* Add metabox support—this is an initial pass at supporting existing meta-boxes without intervention.
+* Display inserter button between blocks.
+* Improve block navigation performance.
+* Hide core namespace in comment serialization. wp:core/gallery becomes wp:gallery.
+* Implement a dropdown for Publish flow.
+* Allow multiselect to work on shift-click.
+* Insert new block from title on enter.
+* Use a dropdown for the block menu (settings, delete, edit as HTML).
+* Add expandable panel for post visibility.
+* Add expandable panel for post scheduling.
+* Implement more inline formatting boundaries.
+* Better clearing of block selection.
+* Show placeholder hint for slash autocomplete on new text blocks.
+* Remove multi-selection header in favor of default block controls (mover and menu).
+* Allow blocks to disable HTML edit mode.
+* Adjust transition and delay of inserter between blocks.
+* Added text color option for button block.
+* Hide extended settings if sidebar is closed.
+* New embed icons.
+* Move the store initialization to a dedicated component.
+* Improve scroll position of scrollable elements.
+* Drop undefined blocks from recent blocks.
+* Update HTML block description.
+* Update embed block description.
+* Add description for classic block.
+* PHPCS-specific improvements.
+* Add a default block icon.
+* Adjust line height of classic text to match paragraph blocks.
+* Adjust filter order in classic block so plugins that extend it can work properly.
+* Set textarea value as prop and not children.
+* Fix mobile issues with block setting menu.
+* Fix undefined colors warning.
+* Fix broken upload button on image placeholder.
+* Fix post edit URL when saving a post/page/CPT.
+* Fix conflict with new TinyMCE version and heading blocks.
+* Tweak block sibling element for better target surface.
+* Avoid loading Gutenberg assets on non-Gutenberg pages.
+* Adjust Jest configuration.
+* Document supportAnchor in block API.
+* Updated TinyMCE to latest.
+* Document block name usage in serialization and add example of serialized block.
+* Updated FAQ section.
+* Upgrade React and Enzyme dependencies.
+
+= 1.4.0 =
+
+* Redesigned the header area of the editor for clarity—groups content actions in the left, and post action in the right.
+* Initial REST API infrastructure for reusable global blocks.
+* Group block settings (delete, inspector, edit HTML) on an ellipsis button.
+* Added new reusable Dropdown component.
+* Show frequently used blocks in the inserter shortcuts (at the bottom of the post).
+* Offer option for the button block to clear content.
+* Refactor block toolbar component in preparation for some iterations (docked toolbar, for example).
+* Allow partial URLs in link input.
+* Avoid using state for tracking arrow key navigation in WritingFlow to prevent re-renders.
+* Improve mobile header after design cleanup.
+* Add focusReturn for Dropdown component.
+* Updated Audio block markup to use figure element.
+* Removed transition on multi-select affecting the perception of speed of the interaction.
+* Show Gallery block description even if there are no images.
+* Persist custom class names.
+* Merge initialization actions into a single action.
+* Fix scroll position when reordering blocks.
+* Fix case where the responsive treatment of the header area was hiding valuable actions.
+* Fix focus styles on the inserter.
+* Fix submenu visibility issue for certain users.
+* Cleanup no longer used code.
+* Document useOnce block API feature.
+
+= 1.3.0 =
+
+* Add an opacity range slider to the cover image block.
+* Offer the option to convert a single block to an HTML block when conflicting content is detected.
+* Persist recently used blocks through sessions.
+* Added support for pasting plain text markdown content and converting to blocks.
+* The block inspector groups features and settings in expandable panels.
+* Accessibility improvements to the color palette component.
+* Added a “feedback” link in the Gutenberg side menu.
+* Use expandable panels for advanced block features (class name and anchor).
+* Removed touch listeners from multi select.
+* Added block descriptions to blocks that didn’t have them.
+* Allow stored values to be updated with new defaults.
+* Refactor image block to use withApiData and fix issues with .tiff images.
+* Clean up non inline elements when pasting inline content.
+* Remove unused code in BlockList component.
+* Added “transform into” text to block switcher.
+* Fixed sidebar overflow causing extra scrollbars.
+* Fixed multi-select inside new scroll container.
+* Fixed image block error with .tiff image.
+* Fixed the content overflowing outside the verse block container.
+* Fixed issues with sticky quick toolbar position.
+* Fixed hitting enter when a block is selected creating a default block after selected block.
+* Fixed teaser markup in demo content.
+* Clean working directory before packaging plugin.
+* Updated Webpack dependencies.
+* Updated Jest and React.
+
+= 1.2.1 =
+
+* Fix issue where invalid block resolution options were not clickable.
+
+= 1.2.0 =
+
+* Resolve block conflicts when editing a block post in the classic editor. Gutenberg's strict content validation has helped identify formatting incompatibilities, and continued improvements are planned for future releases.
+* Add word and block count to table of contents.
+* Add support for meta attributes (custom fields) in block attributes. This allows block authors to specify attributes to live outside of post_content entirely.
+* Allow Gutenberg to be the default editor for posts with blocks and add links to classic editor.
+* Accessibility: add landmark regions.
+* Add metabox placeholder shell.
+* Add crash recovery for blocks which error while saving.
+* Hide Sidebar panels if the user doesn't have the right capabilities.
+* Refactor PostTaxonomies to use 'withApiData'.
+* Create 'withApiData' higher order component for managing API data.
+* Make casing consistent.
+* Allow toolbar wrapper to be clicked through.
+* Support and bootstrap server-registered block attribute schemas.
+* Shift focus into popover when opened.
+* Reuse the tabbable utility to retrieve the tabbables elements in WritingFlow.
+* Change placeholder text on button.
+* Persist the sate of the sidebar across refresh.
+* Use a small multiselect buffer zone, improving multiple block selection.
+* Close popover by escape keypress.
+* Improve dropzone contrast ratio.
+* Improve search message to add context.
+* Improve string extraction for localized strings.
+* Fixed z-index issue of gallery image inline menu.
+* Fixed image block resizing to set the figure wrapper.
+* Fixed column widths in gallery block.
+* Fixed parsing in do_blocks() and rendering of blocks on frontend in the_content.
+* Fixed position of upload svg on mobile.
+
+= 1.1.0 =
+
+* Add blocks "slash" autocomplete—shortcut to continue adding new block without leaving the keyboard.
+* Add ability to remove an image from a gallery from within the block (selecting image).
+* Add option to open a created link in a new window.
+* Support and bootstrap server-registered block attribute schemas.
+* Improve accessibility of add-new-category form.
+* Documentation gets an updated design and content improvements.
+* Adjust column width calculation in gallery block to properly respect column count.
+* Move pending review control together with sticky toggle at the bottom.
+* Add caption styling for video block.
+* Allow removing a "classic text" block with backspaces.
+* Allow Button block to show placeholder text.
+* Drop the deprecated button-secondary class name.
+* Fix link dialog not showing in Safari when caret is in the middle of the word.
+* Fix adding new categories and position newly added term at the top.
+* Fix the resetting of drop-zone states after dropping a file.
+* Fix embed saving "undefined" text when URL is not set.
+* Fix placeholder styling on Text when background color is set.
+* Update Composer + PHPCS.
+* Rename default block handlers.
+* Update code syntax tabs in docutron.
+* Link to plugin download and github repo from docutron.
+* Added block API document.
+* Add "Edit and Save" document.
+
+= 1.0.0 =
+* Restored keyboard navigation with more robust implementation, addressing previous browser issues.
+* Added drag and drop for media with pointer to create new blocks.
+* Merged paragraph and cover text blocks (includes the colors and font size options).
+* Reworked color palette picker with a "clear" and a "custom color" option.
+* Further improvements to inline pasting and fixing errant empty blocks.
+* Added thumbnail size selector to image blocks.
+* Added support for url input and align and edit buttons to audio block.
+* Persist the state of the sidebar across page refresh.
+* Persist state of sidebar panels on page refresh.
+* Persist editor mode on page refresh.
+* New withAPIData higher-order component for making it easier to manage data needs.
+* Preserve unknown block and remove "freeform" comment delimiters (unrecognized HTML is handled without comment delimiters).
+* Show "add new term" in hierarchical taxonomies (including categories).
+* Show tooltip only after mouseover delay.
+* Show post formats only if the post type supports them.
+* Added align and edit buttons to video block.
+* Preload data in withApiData to improve perceived performance.
+* Improve accessibility of sidebar modes.
+* Allow changing cover-image settings before uploading an image.
+* Improve validation leniency around non-meaningful differences.
+* Take into account capabilities for publishing action.
+* Update author selector to show only users capable of authoring posts.
+* Normalize pasted blockquote contents.
+* Refactored featured image, page attributes to use withApiData
+* Added a fix to avoid cloning nodes by passing pasted HTML string.
+* Added a fix to avoid re-encoding on encoded posts.
+* Fixed resetting the focus config when block already selected.
+* Allowing adding of plain text after insert link at the end of a paragraph.
+* Update to latest TinyMCE version.
+* Show only users capable of authoring posts.
+* Add submit for review to publish for contributor.
+* Delete or backspace in an empty "classic text" block now removes it.
+* Check for type in block transformations logic.
+* Fixed drop-down menu issue on classic text.
+* Added filter to allow post types to disable "edit in gutenberg" links.
+* Made UrlInput and UrlInputButton available as reusable components.
+* Use wordpress/a11y package instead of global.
+* Added npm5 package-lock.
+* We welcome all your feedback and contributions on the project repository, or ping us in #core-editor. Follow the "gutenberg" tag for past updates.
+
+= 0.9.0 =
+* Added ability to change font-size in cover text using slider and number input.
+* Added support for custom anchors (ids) on blocks, allowing to link directly to a section of the post.
+* Updated pull-quote design.
+* Created custom color palette component with "clear" option and "custom color" option. (And better markup and accessibility.)
+* Improve pasting: recognizing more elements, adding tests, stripping non-semantic markup, etc.
+* Improve gallery visual design and fix cropping in Safari.
+* Allow selecting a heading block from the table-of-contents panel directly.
+* Make toolbar slide horizontally for mobile.
+* Improve range-input control with a number input.
+* Fix pasting problems (handling of block attributes).
+* More stripping of unhandled elements during paste.
+* Show post format selector only for posts.
+* Display nicer URLs when editing links.
+* More compact save indicator.
+* Disabled arrow key navigation between blocks as we refine implementation.
+* Removed blank target from "view post" in notices.
+* Fix empty links still rendering ont he front-end.
+* Fix shadow on inline toolbars.
+* Fix problem with inserting pull-quotes.
+* Fix drag and drop on image block.
+* Removed warning when publishing.
+* Don't provide version for vendor scripts.
+* Clean category code in block registration.
+* Added history and resources docs.
+
+= 0.8.0 =
+* New Categories Block (based on existing widget).
+* New Text Columns Block (initial exploration of text-only multiple columns).
+* New Video Block.
+* New Shortcode Block.
+* New Audio Block.
+* Added resizing handlers to Image Block.
+* Added direct image upload button to Image Block and Gallery Block.
+* Give option to transform a block to Classic when it encounters problems.
+* Give option to Overwrite changes on a block detected as invalid.
+* Added "link to" option in galleries.
+* Added support for custom taxonomies.
+* Added post formats selector to post settings.
+* Added keywords support (aliases) to various blocks to improve search discovery.
+* Significant improvements to the way attributes are specified in the Block API and its clarity (handles defaults and types).
+* Added Tooltip component displaying aria-labels from buttons.
+* Removed stats tracking code.
+* Updated design document.
+* Capture and recover from block rendering runtime errors.
+* Handle enter when focusing on outer boundary of a block.
+* Reduce galleries json attributes data to a minimum.
+* Added caption styles to the front-end for images and embeds.
+* Added missing front-end alignment classes for table and cover-text blocks.
+* Only reset blocks on initial load to prevent state fluctuations.
+* Improve calculation of dirty state by making a diff against saved post.
+* Improve visual weight of toolbar by reducing its silhouette.
+* Improve rendering of galleries on the front-end.
+* Improve Cover Image placeholder visual presentation.
+* Improve front-end display of quotes.
+* Improve responsive design of galleries on the front-end.
+* Allow previewing new posts that are yet to be saved.
+* Reset scrolling position within inserter when switching tabs.
+* Refactor popover to render at root of document.
+* Refactor withFocusReturn to handle accessibility better in more contexts.
+* Prevent overlap between multi-selection and within-block selection.
+* Clear save notices when triggering a new save.
+* Disable "preview" button if post is not saveable.
+* Renamed blocks.query to blocks.source for clarity and updated documentation.
+* Rearrange block stylesheets to reflect display and editor styles.
+* Use @wordpress dependencies consistently.
+* Added validation checks for specifying a block's category.
+* Fix problems with quote initialization and list transformation.
+* Fix issue where Cover Image was being considered invalid after edits.
+* Fix errors in editable coming from Table block commands.
+* Fix error in latest posts block when date is not set for a post.
+* Fix issue with active color in ColorPalette component.
+* Prevent class=false serialization issue in covert-text.
+* Treat range control value as numeric.
+* Added warning when using Editable and passing non-array values.
+* Show block switcher above link input.
+* Updated rememo dependency.
+* Start consuming from separate @wordpress dependencies.
+* Fix problem with inserting new galleries.
+* Fix issue with embeds and missing captions.
+* Added outreach section to docs.
+
+= 0.7.1 =
+* Address problem with the freeform block and Jetpack's contact form.
+
+= 0.7.0 =
+* Hide placeholders on focus—reduces visual distractions while writing.
+* Add PostAuthor dropdown to the UI.
+* Add theme support for customized color palettes and a shared component (applies to cover text and button blocks).
+* Add theme support for wide images.
+* Report on missing headings in the document outline feature.
+* Update block validation to make it less prone to over-eagerness with trivial changes (like whitespace and new lines).
+* Attempt to create an embed block automatically when pasting URL on a single line.
+* Save post before previewing.
+* Improve operations with "lists", enter on empty item creates new paragraph block, handling backspace, etc.
+* Don't serialize attributes that match default attributes.
+* Order link suggestions by relevance.
+* Order embeds for easier discoverability.
+* Added "keywords" property for searching blocks with aliases.
+* Added responsive styles for Table block in the front end.
+* Set default list type to be unordered list.
+* Improve accessibility of UrlInput component.
+* Improve accessibility and keyboard interaction of DropdownMenu.
+* Improve Popover component and use for PostVisibility.
+* Added higher order component for managing spoken messages.
+* Localize schema for WP API, avoiding initialization delay if schema is present.
+* Do not expose editor.settings to block authors.
+* Do not remove tables on pasting.
+* Consolidate block server-side files with client ones in the same directory.
+* Removed array of paragraphs structure from text block.
+* Trim whitespace when searching for blocks.
+* Document, test, and refactor DropdownMenu component.
+* Use separate mousetrap instance per component instance.
+* Add npm organization scope to WordPress dependencies.
+* Expand utilities around fixture regeneration.
+* Renamed "Text" to "Paragraph".
+* Fix multi-selection "delete" functionality.
+* Fix text color inline style.
+* Fix issue caused by changes with React build process.
+* Fix splitting editable without child nodes.
+* Use addQueryArgs in oEmbed proxy url.
+* Update dashicons with new icons.
+* Clarify enqueuing block assets functions.
+* Added code coverage information to docs.
+* Document how to create new docs.
+* Add example of add_theme_support in docs.
+* Added opt-in mechanism for learning what blocks are being added to the content.
+
+= 0.6.0 =
+* Split paragraphs on enter—we have been exploring different behaviours here.
+* Added grid layout option for latest posts with columns slider control.
+* Show internal posts / pages results when creating links.
+* Added "Cover Text" block with background, text color, and full-width options.
+* Autosaving drafts.
+* Added "Read More" block.
+* Added color options to the button block.
+* Added mechanism for validating and protecting blocks that may have suffered unrecognized edits.
+* Add patterns plugin for text formatting shortcuts: create lists by adding * at the beginning of a text line, use # to create headings, and backticks for code.
+* Implement initial support for Cmd/Ctrl+Z (undo) and Cmd/Ctrl+Shift+Z (redo).
+* Improve pasting experience from outside editors by transforming content before converting to blocks.
+* Improve gallery creation flow by opening into "gallery" mode from placeholder.
+* Added page attributes with menu order setting.
+* Use two distinct icons for quote style variations.
+* Created KeyboardShortcuts component to handle keyboard events.
+* Add support for custom icons (non dashicons) on blocks.
+* Initialize new posts with auto-draft to match behaviour of existing editor.
+* Don't display "save" button for published posts.
+* Added ability to set a block as "use once" only (example: "read more" block).
+* Hide gallery display settings in media modal.
+* Simplify "cover image" markup and resolve conflict state in demo.
+* Introduce PHP classes for interacting with block types.
+* Announce block search results to assistive technologies.
+* Reveal "continue writing" shortcuts on focus.
+* Update document.title when the post title changes.
+* Added focus styles to several elements in the UI.
+* Added external-link component to handle links opening in new tabs or windows.
+* Improve responsive video on embed previews.
+* Improve "speak" messages for tag suggestions.
+* Make sure newly created blocks are marked as valid.
+* Preserve valid state during transformations.
+* Allow tabbing away from table.
+* Improve display of focused panel titles.
+* Adjust padding and margins across various design elements for consistency and normalization.
+* Fix pasting freeform content.
+* Fix proper propagation of updated block attributes.
+* Fix parsing and serialization of multi-paragraph pullquotes.
+* Fix a case where toggling pending preview would consider post as saved.
+* Fix positioning of block mover on full-width blocks.
+* Fix line height regression in quote styles.
+* Fix IE11 with polyfill for fetch method.
+* Fix case where blocks are created with isTyping and it never clears.
+* Fix block warning display in IE11.
+* Polish inspector visual design.
+* Prevent unhandled actions from returning new state reference.
+* Prevent unintentionally clearing link input value.
+* Added focus styles to switch toggle components.
+* Avoid navigating outside the editor with arrow keys.
+* Add short description to Verse block.
+* Initialize demo content only for new demo posts.
+* Improve insert link accessibility.
+* Improve version compare checks for plugin compatibility.
+* Clean up obsolete poststoshowattribute in LatestPosts block.
+* Consolidate addQueryArgs usage.
+* Add unit tests to inserter.
+* Update fixtures with latest modifications and ensure all end in newlines.
+* Added codecov for code coverage.
+* Clean up JSDoc comments.
+* Link to new docs within main readme.
+
+= 0.5.0 =
+* New tabs mode for the sidebar to switch between post settings and block inspector.
+* Implement recent blocks display.
+* Mobile implementation of block mover, settings, and delete actions.
+* Search through all tabs on the inserter and hide tabs.
+* New documentation app to serve all tutorials, faqs, docs, etc.
+* Enable ability to add custom classes to blocks (via inspector).
+* Add ability to drag-and-drop on image block placeholders to upload images.
+* Add "table of contents" document outline for headings (with empty heading validation).
+* Refactor tests to use Jest API.
+* New block: Verse (intended for poetry, respecting whitespace).
+* Avoid showing UI when typing and starting a new paragraph (text block).
+* Display warning message when navigating away from the editor with unsaved changes.
+* Use old editor as "freeform".
+* Improve PHP parser compatibility with different server configurations ("mbstring" extension and PCRE settings).
+* Improve PostVisibility markup and accessibility.
+* Add shortcuts to manage indents and levels in List block.
+* Add alignment options to latest posts block.
+* Add focus styles for quick tags buttons in text mode.
+* Add way to report PHP parsing performance.
+* Add labels and roles to UrlInput.
+* Add ability to set custom placeholders for text and headings as attributes.
+* Show error message when trashing action fails.
+* Pass content to dynamic block render functions in PHP.
+* Fix various z-index issues and clarify reasonings.
+* Fix DropdownMenu arrows navigation and add missing aria-label.
+* Update sandboxed iframe size calculations.
+* Export inspector controls component under wp.blocks.
+* Adjust Travis JS builds to improve task allocation.
+* Fix warnings during tests.
+* Fix caret jumping when switching formatting in Editable.
+* Explicitly define prop-types as dependency.
+* Update list of supported browsers for consistency with core.
+
+= 0.4.0 =
+* Initial FAQ (in progress).
+* API for handling pasted content. (Aim is to have specific handling for converting Word, Markdown, Google Docs to native WordPress blocks.)
+* Added support for linking to a url on image blocks.
+* Navigation between blocks using arrow keys.
+* Added alternate Table block with TinyMCE functionality for adding/removing rows/cells, etc. Retired previous one.
+* Parse more/noteaser comment tokens from core.
+* Re-engineer the approach for rendering embed frames.
+* First pass at adding aria-labels to blocks list.
+* Setting up Jest for better testing environment.
+* Improve performance of server-side parsing.
+* Update blocks documentation with latest API functions and clearer examples.
+* Use fixed position for notices.
+* Make inline mode the default for Editable.
+* Add actions for plugins to register frontend and editor assets.
+* Supress gallery settings sidebar on media library when editing gallery.
+* Validate save and edit render when registering a block.
+* Prevent media library modal from opening when loading placeholders.
+* Update to sidebar design and behaviour on mobile.
+* Improve font-size in inserter and latest posts block.
+* Improve rendering of button block in the front end.
+* Add aria-label to edit image button.
+* Add aria-label to embed input url input.
+* Use pointer cursor for tabs in inserter.
+* Update design docs with regard to selected/unselected states.
+* Improve generation of wp-block-* classes for consistency.
+* Select first cell of table block when initializing.
+* Fix wide and full alignment on the front-end when images have no caption.
+* Fix initial state of freeform block.
+* Fix ability to navigate to resource on link viewer.
+* Fix clearing floats on inserter.
+* Fix loading of images in library.
+* Fix auto-focusing on table block being too agressive.
+* Clean double reference to pegjs in dependencies.
+* Include messages to ease debugging parser.
+* Check for exact match for serialized content in parser tests.
+* Add allow-presentation to fix issue with sandboxed iframe in Chrome.
+* Declare use of classnames module consistently.
+* Add translation to embed title.
+* Add missing text domains and adjust PHPCS to warn about them.
+* Added template for creating new issues including mentions of version number.
+
+= 0.3.0 =
+* Added framework for notices and implemented publishing and saving ones.
+* Implemented tabs on the inserter.
+* Added text and image quick inserts next to inserter icon at the end of the post.
+* Generate front-end styles for core blocks and enqueue them.
+* Include generated block classname in edit environment.
+* Added "edit image" button to image and cover image blocks.
+* Added option to visually crop images in galleries for nicer alignment.
+* Added option to disable dimming the background in cover images.
+* Added buffer for multi-select flows.
+* Added option to display date and to configure number of posts in LatestPosts block.
+* Added PHP parser based on PEG.js to unify grammars.
+* Split block styles for display so they can be loaded on the theme.
+* Auto-focusing for inserter search field.
+* Added text formatting to CoverImage block.
+* Added toggle option for fixed background in CoverImage.
+* Switched to store attributes in unescaped JSON format within the comments.
+* Added placeholder for all text blocks.
+* Added placeholder text for headings, quotes, etc.
+* Added BlockDescription component and applied it to several blocks.
+* Implemented sandboxing iframe for embeds.
+* Include alignment classes on embeds with wrappers.
+* Changed the block name declaration for embeds to be "core-embed/name-of-embed".
+* Simplified and made more robust the rendering of embeds.
+* Different fixes for quote blocks (parsing and transformations).
+* Improve display of text within cover image.
+* Fixed placeholder positioning in several blocks.
+* Fixed parsing of HTML block.
+* Fixed toolbar calculations on blocks without toolbars.
+* Added heading alignments and levels to inspector.
+* Added sticky post setting and toggle.
+* Added focus styles to inserter search.
+* Add design blueprints and principles to the storybook.
+* Enhance FormTokenField with accessibility improvements.
+* Load word-count module.
+* Updated icons for trash button, and Custom HTML.
+* Design tweaks for inserter, placeholders, and responsiveness.
+* Improvements to sidebar headings and gallery margins.
+* Allow deleting selected blocks with "delete" key.
+* Return more than 10 categories/tags in post settings.
+* Accessibility improvements with FormToggle.
+* Fix media button in gallery placeholder.
+* Fix sidebar breadcrumb.
+* Fix for block-mover when blocks are floated.
+* Fixed inserting Freeform block (now classic text).
+* Fixed missing keys on inserter.
+* Updated drop-cap class implementation.
+* Showcasing full-width cover image in demo content.
+* Copy fixes on demo content.
+* Hide meta-boxes icons for screen readers.
+* Handle null values in link attributes.
+
+= 0.2.0 =
+* Include "paste" as default plugin in Editable.
+* Extract block alignment controls as a reusable component.
+* Added button to delete a block.
+* Added button to open block settings in the inspector.
+* New block: Custom HTML (to write your own HTML and preview it).
+* New block: Cover Image (with text over image support).
+* Rename "Freeform" block to "Classic Text".
+* Added support for pages and custom post types.
+* Improve display of "saving" label while saving.
+* Drop usage of controls property in favor of components in render.
+* Add ability to select all blocks with ctrl/command+A.
+* Automatically generate wrapper class for styling blocks.
+* Avoid triggering multi-select on right click.
+* Improve target of post previewing.
+* Use imports instead of accessing the wp global.
+* Add block alignment and proper placeholders to pullquote block.
+* Wait for wp.api before loading the editor. (Interim solution.)
+* Adding several reusable inspector controls.
+* Design improvements to floats, switcher, and headings.
+* Add width classes on figure wrapper when using captions in images.
+* Add image alt attributes.
+* Added html generation for photo type embeds.
+* Make sure plugin is run on WP 4.8.
+* Update revisions button to only show when there are revisions.
+* Parsing fixes on do_blocks.
+* Avoid being keyboard trapped on editor content.
+* Don't show block toolbars when pressing modifier keys.
+* Fix overlapping controls in Button block.
+* Fix post-title line height.
+* Fix parsing void blocks.
+* Fix splitting inline Editable instances with shift+enter.
+* Fix transformation between text and list, and quote and list.
+* Fix saving new posts by making post-type mandatory.
+* Render popovers above all elements.
+* Improvements to block deletion using backspace.
+* Changing the way block outlines are rendered on hover.
+* Updated PHP parser to handle shorthand block syntax, and fix newlines.
+* Ability to cancel adding a link from link menu.
+
+= 0.1.0 =
+* First release of the plugin.
diff --git a/docs/contributors/coding-guidelines.md b/docs/contributors/coding-guidelines.md
index 2e02dfeaa10f7e..3db68e46b7a673 100644
--- a/docs/contributors/coding-guidelines.md
+++ b/docs/contributors/coding-guidelines.md
@@ -59,7 +59,7 @@ export default function Notice( { children, onRemove, isDismissible } ) {
}
```
-A component's class name should **never** be used outside its own folder (with rare exceptions such as [`_z-index.scss`](https://github.com/WordPress/gutenberg/blob/master/assets/stylesheets/_z-index.scss)). If you need to inherit styles of another component in your own components, you should render an instance of that other component. At worst, you should duplicate the styles within your own component's stylesheet. This is intended to improve maintainability by treating individual components as the isolated abstract interface.
+A component's class name should **never** be used outside its own folder (with rare exceptions such as [`_z-index.scss`](https://github.com/WordPress/gutenberg/blob/master/packages/base-styles/_z-index.scss)). If you need to inherit styles of another component in your own components, you should render an instance of that other component. At worst, you should duplicate the styles within your own component's stylesheet. This is intended to improve maintainability by isolating shared components as a reusable interface, reducing the surface area of similar UI elements by adapting a limited set of common components to support a varied set of use-cases.
#### SCSS File Naming Conventions for Blocks
@@ -201,6 +201,251 @@ alert( 'My name is ' + name + '.' );
alert( `My name is ${ name }.` );
```
+## JavaScript Documentation using JSDoc
+
+Gutenberg follows the [WordPress JavaScript Documentation Standards](https://make.wordpress.org/core/handbook/best-practices/inline-documentation-standards/javascript/), with additional guidelines relevant for its distinct use of [import semantics](https://github.com/WordPress/gutenberg/blob/master/docs/contributors/coding-guidelines.md#imports) in organizing files, the [use of TypeScript tooling](https://github.com/WordPress/gutenberg/blob/master/docs/contributors/testing-overview.md#javascript-testing) for types validation, and automated documentation generation using [`@wordpress/docgen`](https://github.com/WordPress/gutenberg/tree/master/packages/docgen).
+
+For additional guidance, consult the following resources:
+
+- [JSDoc Official Documentation](https://jsdoc.app/index.html)
+- [TypeScript Supported JSDoc](https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html#supported-jsdoc)
+
+### Custom Types
+
+Define custom types using the [JSDoc `@typedef` tag](https://jsdoc.app/tags-typedef.html).
+
+A custom type should include a description, and should always include its base type.
+
+Custom types should be named as succinctly as possible, while still retaining clarity of meaning and avoiding conflict with other global or scoped types. A `WP` prefix should be applied to all custom types. Avoid superfluous or redundant prefixes and suffixes (for example, a `Type` suffix, or `Custom` prefix). Custom types are not global by default, so a custom type does not need to be excessively specific to a particular package. However, they should be named with enough specificity to avoid ambiguity or name collisions when brought into the same scope as another type.
+
+```js
+/**
+ * A block selection object.
+ *
+ * @typedef {Object} WPBlockSelection
+ *
+ * @property {string} clientId A block client ID.
+ * @property {string} attributeKey A block attribute key.
+ * @property {number} offset An attribute value offset, based on the rich
+ * text value.
+ */
+```
+
+Custom types can also be used to describe a set of predefined options. While the [type union](https://jsdoc.app/tags-type.html) can be used with literal values as an inline type, it can be difficult to align tags while still respecting a maximum line length of 80 characters. Using a custom type to define a union type can afford the opportunity to describe the purpose of these options, and helps to avoid these line length issues.
+
+```js
+/**
+ * Named breakpoint sizes.
+ *
+ * @typedef {'huge'|'wide'|'large'|'medium'|'small'|'mobile'} WPBreakpoint
+ */
+```
+
+Note the use of quotes when defining a set of string literals. As in the [JavaScript Coding Standards](https://make.wordpress.org/core/handbook/best-practices/coding-standards/javascript/), single quotes should be used when assigning a string literal either as the type or as a [default function parameter](#nullable-undefined-and-void-types), or when [specifying the path](#importing-and-exporting-types) of an imported type.
+
+### Importing and Exporting Types
+
+Use the [TypeScript `import` function](https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html#import-types) to import type declarations from other files or third-party dependencies.
+
+Since an imported type declaration can occupy an excess of the available line length and become verbose when referenced multiple times, you are encouraged to create an alias of the external type using a `@typedef` declaration at the top of the file, immediately following [the `import` groupings](https://github.com/WordPress/gutenberg/blob/master/docs/contributors/coding-guidelines.md#imports).
+
+```js
+/** @typedef {import('@wordpress/data').WPDataRegistry} WPDataRegistry */
+```
+
+Note that all custom types defined in another file can be imported.
+
+When considering which types should be made available from a WordPress package, the `@typedef` statements in the package's entry point script should be treated as effectively the same as its public API. It is important to be aware of this, both to avoid unintentionally exposing internal types on the public interface, and as a way to expose the public types of a project.
+
+```js
+// packages/data/src/index.js
+
+/** @typedef {import('./registry').WPDataRegistry} WPDataRegistry */
+```
+
+In this snippet, the `@typedef` will support the usage of the previous example's `import('@wordpress/data')`.
+
+#### External Dependencies
+
+Many third-party dependencies will distribute their own TypeScript typings. For these, the `import` semantics should "just work".
+
+![Working Example: `import` type](https://user-images.githubusercontent.com/1779930/70167742-62198800-1695-11ea-9c21-82a91d4a60e2.png)
+
+If you use a [TypeScript integration](https://github.com/Microsoft/TypeScript/wiki/TypeScript-Editor-Support) for your editor, you can typically see that this works if the type resolves to anything other than the fallback `any` type.
+
+For packages which do not distribute their own TypeScript types, you are welcomed to install and use the [DefinitelyTyped](http://definitelytyped.org/) community-maintained types definitions, if one exists.
+
+### Record Types
+
+When documenting a generic type such as `Object`, `Function`, `Promise`, etc., always include details about the expected record types.
+
+```js
+// Incorrect:
+
+/** @type {Object} */
+/** @type {Function} */
+/** @type {Promise} */
+
+// Correct:
+
+/** @type {Object} */
+/** @type {(key:string)=>boolean} */
+/** @type {Promise} */
+```
+
+The function expression here uses TypeScript's syntax for function types, which can be useful in providing more detailed information about the names and types of the expected parameters. For more information, consult the [TypeScript `@type` tag function recommendations](https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html#type).
+
+In more advanced cases, you may define your own custom types as a generic type using the [TypeScript `@template` tag](https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html#template).
+
+Similar to the "Custom Types" advice concerning type unions and with literal values, you can consider to create a custom type `@typedef` to better describe expected key values for object records, or to extract a complex function signature.
+
+```js
+/**
+ * An apiFetch middleware handler. Passed the fetch options, the middleware is
+ * expected to call the `next` middleware once it has completed its handling.
+ *
+ * @typedef {(options:WPAPIFetchOptions,next:WPAPIFetchMiddleware)=>void} WPAPIFetchMiddleware
+ */
+```
+
+```js
+/**
+ * Named breakpoint sizes.
+ *
+ * @typedef {"huge"|"wide"|"large"|"medium"|"small"|"mobile"} WPBreakpoint
+ */
+
+/**
+ * Hash of breakpoint names with pixel width at which it becomes effective.
+ *
+ * @type {Object}
+ */
+const BREAKPOINTS = { huge: 1440 /* , ... */ };
+```
+
+### Nullable, Undefined, and Void Types
+
+You can express a nullable type using a leading `?`. Use the nullable form of a type only if you're describing either the type or an explicit `null` value. Do not use the nullable form as an indicator of an optional parameter.
+
+```js
+/**
+ * Returns a configuration value for a given key, if exists. Returns null if
+ * there is no configured value.
+ *
+ * @param {string} key Configuration key to retrieve.
+ *
+ * @return {?*} Configuration value, if exists.
+ */
+function getConfigurationValue( key ) {
+ return config.hasOwnProperty( key ) ? config[ key ] : null;
+}
+```
+
+Similarly, use the `undefined` type only if you're expecting an explicit value of `undefined`.
+
+```js
+/**
+ * Returns true if the next HTML token closes the current token.
+ *
+ * @param {WPHTMLToken} currentToken Current token to compare with.
+ * @param {WPHTMLToken|undefined} nextToken Next token to compare against.
+ *
+ * @return {boolean} True if `nextToken` closes `currentToken`, false otherwise.
+ */
+```
+
+If a parameter is optional, use the [square-bracket notation](https://jsdoc.app/tags-param.html#optional-parameters-and-default-values). If an optional parameter has a default value which can be expressed as a [default parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters) in the function expression, it is not necesssary to include the value in JSDoc. If the function parameter has an effective default value which requires complex logic and cannot be expressed using the default parameters syntax, you can choose to include the default value in the JSDoc.
+
+```js
+/**
+ * Renders a toolbar.
+ *
+ * @param {Object} props Component props.
+ * @param {string} [props.className] Class to set on the container ``.
+ */
+```
+
+When a function does not include a `return` statement, it is said to have a `void` return value. It is not necessary to include a `@return` tag if the return type is `void`.
+
+If a function has multiple code paths where some (but not all) conditions result in a `return` statement, you can document this as a union type including the `void` type.
+
+```js
+/**
+ * Returns a configuration value for a given key, if exists.
+ *
+ * @param {string} key Configuration key to retrieve.
+ *
+ * @return {*|void} Configuration value, if exists.
+ */
+function getConfigurationValue( key ) {
+ if ( config.hasOwnProperty( key ) ) {
+ return config[ key ];
+ }
+}
+```
+
+When documenting a [function type](https://github.com/WordPress/gutenberg/blob/add/typescript-jsdoc-guidelines/docs/contributors/coding-guidelines.md#record-types), you must always include the `void` return value type, as otherwise the function is inferred to return a mixed ("any") value, not a void result.
+
+```js
+/**
+ * An apiFetch middleware handler. Passed the fetch options, the middleware is
+ * expected to call the `next` middleware once it has completed its handling.
+ *
+ * @typedef {(options:WPAPIFetchOptions,next:WPAPIFetchMiddleware)=>void} WPAPIFetchMiddleware
+ */
+```
+
+### Documenting Examples
+
+Because the documentation generated using the `@wordpress/docgen` tool will include `@example` tags if they are defined, it is considered a best practice to include usage examples for functions and components. This is especially important for documented members of a package's public API.
+
+When documenting an example, use the markdown \`\`\` code block to demarcate the beginning and end of the code sample. An example can span multiple lines.
+
+```js
+/**
+ * Given the name of a registered store, returns an object of the store's
+ * selectors. The selector functions are been pre-bound to pass the current
+ * state automatically. As a consumer, you need only pass arguments of the
+ * selector, if applicable.
+ *
+ * @param {string} name Store name.
+ *
+ * @example
+ * ```js
+ * select( 'my-shop' ).getPrice( 'hammer' );
+ * ```
+ *
+ * @return {Object} Object containing the store's
+ * selectors.
+ */
+```
+
+### Documenting `@wordpress/element` (React) Components
+
+When possible, all components should be implemented as [function components](https://reactjs.org/docs/components-and-props.html#function-and-class-components), using [hooks](https://reactjs.org/docs/hooks-intro.html) for managing component lifecycle and state.
+
+Documenting a function component should be treated the same as any other function. The primary caveat in documenting a component is being aware that the function typically accepts only a single argument (the "props"), which may include many property members. Use the [dot syntax for parameter properties](https://jsdoc.app/tags-param.html#parameters-with-properties) to document individual prop types.
+
+```js
+/**
+ * Renders the block's configured title as a string, or empty if the title
+ * cannot be determined.
+ *
+ * @example
+ *
+ * ```jsx
+ *
+ * ```
+ *
+ * @param {Object} props Component props.
+ * @param {?string} props.name Block name.
+ *
+ * @return {?string} Block title.
+ */
+```
+
+For class components, there is no recommendation for documenting the props of the component. Gutenberg does not use or endorse the [`propTypes` static class member](https://reactjs.org/docs/typechecking-with-proptypes.html).
+
## PHP
We use
diff --git a/docs/contributors/develop.md b/docs/contributors/develop.md
index 7b8ad300ee3163..37718e9e6fde85 100644
--- a/docs/contributors/develop.md
+++ b/docs/contributors/develop.md
@@ -13,3 +13,4 @@ The following resources offer additional information for developers who wish to
* [Managing Packages](/docs/contributors/managing-packages.md).
* [Gutenberg Release Process](/docs/contributors/release.md) - a checklist for the different type of releases for Gutenberg project.
* [Localizing Gutenberg Plugin](/docs/contributors/localizing.md) - a guide on how to translate Gutenberg in your locale or language.
+* [React Native mobile Gutenberg](/docs/contributors/native-mobile.md) - a guide on the React Native based mobile Gutenberg editor.
diff --git a/docs/contributors/document.md b/docs/contributors/document.md
index 43efc49c3db171..27122cd8ecddbf 100644
--- a/docs/contributors/document.md
+++ b/docs/contributors/document.md
@@ -8,8 +8,8 @@ To add a new documentation page:
1. Create a Markdown file in the [docs](https://github.com/WordPress/gutenberg/tree/master/docs) folder
2. Add item to the [toc.json](https://github.com/WordPress/gutenberg/blob/master/docs/toc.json) hierarchy
-3. Update manifest.json by running `npm run docs:build`
-4. Commit manifest.json with other files updated
+3. Update `manifest-devhub.json` by running `npm run docs:build`
+4. Commit `manifest-devhub.json` with other files updated
## Using Links
diff --git a/docs/contributors/getting-started.md b/docs/contributors/getting-started.md
index 79e255b5c28a48..c16ca6b9bc5559 100644
--- a/docs/contributors/getting-started.md
+++ b/docs/contributors/getting-started.md
@@ -2,9 +2,11 @@
Gutenberg is a Node.js-based project, built primarily in JavaScript.
-The first step is to install a recent version of Node. The easiest way (on MacOS, Linux, or Windows 10 with the Linux Subsystem) is by installing and running [nvm]. Once `nvm` is installed, you can install the correct version of Node by running `nvm install` in the Gutenberg directory.
+The first step is to install the [latest active LTS release](https://github.com/nodejs/Release#release-schedule) of Node. The easiest way (on macOS, Linux, or Windows 10 with the Linux Subsystem) is by installing and running [nvm]. Once `nvm` is installed, you can install the correct version of Node by running `nvm install` in the Gutenberg directory.
-Once you have Node installed, run these scripts:
+Once you have Node installed, run these scripts from within your local Gutenberg repository:
+
+Note: The install scripts require [Python](https://www.python.org/) to be installed and in the path of the local system.
```
npm install
@@ -17,6 +19,9 @@ If you don't have a local WordPress environment to load Gutenberg in, we can hel
## Local Environment
+### Step 1: Installing a Local Environment
+#### Quickest Method: Using Docker
+
The quickest way to get up and running is to use the provided Docker setup. If you don't already have it, you'll need to install Docker by following their instructions for [Windows 10 Pro](https://docs.docker.com/docker-for-windows/install/), [all other version of Windows](https://docs.docker.com/toolbox/toolbox_install_windows/), [macOS](https://docs.docker.com/docker-for-mac/install/), or [Linux](https://docs.docker.com/v17.12/install/linux/docker-ce/ubuntu/#install-using-the-convenience-script).
Once Docker is installed and running, run this script to install WordPress, and build your local environment:
@@ -25,6 +30,7 @@ Once Docker is installed and running, run this script to install WordPress, and
npm run env install
```
+#### Alternative Method: Using an Existing Local WordPress Install
WordPress will be installed in the `wordpress` directory, if you need to access WordPress core files directly, you can find them there.
If you already have WordPress checked out in a different directory, you can use that installation, instead, by running these commands:
@@ -40,18 +46,36 @@ In Windows, you can set the `WP_DEVELOP_DIR` environment variable using the appr
CMD: set WP_DEVELOP_DIR=/path/to/wordpress-develop
PowerShell: $env:WP_DEVELOP_DIR = "/path/to/wordpress-develop"
+
+### Step 2: Accessing and Configuring the Local WordPress Install
+#### Accessing the Local WordPress Install
+
+Whether you decided to use Docker or an existing local WordPress install, the WordPress installation should now be available at `http://localhost:8889` (**Username**: `admin`, **Password**: `password`).
+If this port is in use, you can override it using the `LOCAL_PORT` environment variable. For example running the below command on your computer will change the URL to
+`http://localhost:7777` .
+
+Linux/macOS: `export LOCAL_PORT=7777`
+Windows using Command Prompt: `setx LOCAL_PORT "7777"`
+Windows using PowerShell: `$env:LOCAL_PORT = "7777"`
+
+If you're running [e2e tests](/docs/contributors/testing-overview.md#end-to-end-testing), this change will be used correctly.
-The WordPress installation should be available at `http://localhost:8889` (**Username**: `admin`, **Password**: `password`).
-If this port is in use, you can override it using the `LOCAL_PORT` environment variable. For example, `export LOCAL_PORT=7777` will change the URL to `http://localhost:7777` . If you're running [e2e tests](/docs/contributors/testing-overview.md#end-to-end-testing), this change will be used correctly.
+To shut down this local WordPress instance run `npm run env stop`. To start it back up again, run `npm run env start`.
-To bring down this local WordPress instance later run `npm run env stop`. To bring it back up again, run `npm run env start`.
+#### Toggling Debug Systems
WordPress comes with specific [debug systems](https://wordpress.org/support/article/debugging-in-wordpress/) designed to simplify the process as well as standardize code across core, plugins and themes. It is possible to use environment variables (`LOCAL_WP_DEBUG` and `LOCAL_SCRIPT_DEBUG`) to update a site's configuration constants located in `wp-config.php` file. Both flags can be disabled at any time by running the following command:
+
+Example on Linux/MacOS:
```
LOCAL_SCRIPT_DEBUG=false LOCAL_WP_DEBUG=false npm run env install
```
By default, both flags will be set to `true`.
+#### Troubleshooting
+
+You might find yourself stuck on a screen stating that "you are running WordPress without JavaScript and CSS files". If you tried installing WordPress via `npm run env install`, it probably means that something went wrong during the process. To fix it, try removing the `/wordpress` folder and running `npm run env install` again.
+
## On A Remote Server
Open a terminal (or if on Windows, a command prompt) and navigate to the repository you cloned. Now type `npm install` to get the dependencies all set up. Once that finishes, you can type `npm run build`. You can now upload the entire repository to your `wp-content/plugins` directory on your web server and activate the plugin from the WordPress admin.
@@ -61,10 +85,14 @@ You can also type `npm run package-plugin` which will run the two commands above
[npm]: https://www.npmjs.com/
[nvm]: https://github.com/creationix/nvm
-## Playground
+## Storybook
+
+> Storybook is an open source tool for developing UI components in isolation for React, React Native and more. It makes building stunning UIs organized and efficient.
+
+The Gutenberg repository also includes [Storybook] integration that allows testing and developing in a WordPress-agnostic context. This is very helpful for developing reusable components and trying generic JavaScript modules without any backend dependency.
-The Gutenberg repository also includes a static Gutenberg playground that allows testing and developing in a WordPress-agnostic context. This is very helpful for developing reusable components and trying generic JavaScript modules without any backend dependency.
+You can launch Storybook by running `npm run storybook:dev` locally. It will open in your browser automatically.
-You can launch the playground by running `npm run playground:dev` locally. The playground should be available on [http://localhost:1234](http://localhost:1234).
+You can also test Storybook for the current `master` branch on GitHub Pages: [https://wordpress.github.io/gutenberg/](https://wordpress.github.io/gutenberg/)
-You can also test the playground version of the current master branch on GitHub Pages: [https://wordpress.github.io/gutenberg/](https://wordpress.github.io/gutenberg/)
+[Storybook]: https://storybook.js.org/
diff --git a/docs/contributors/git-workflow.md b/docs/contributors/git-workflow.md
index 7f1499bc7de34a..4f909c31af095d 100644
--- a/docs/contributors/git-workflow.md
+++ b/docs/contributors/git-workflow.md
@@ -36,14 +36,25 @@ To sum it up, you need to fetch any new changes in the repository, rebase your b
```sh
git fetch
git rebase master
-git push --force-with-lease your-branch-name
+git push --force-with-lease origin your-branch-name
```
## Keeping Your Fork Up To Date
-Working on pull request starts with forking the Gutenberg repository, your separate working copy. Which can easily go out of sync as new pull requests are merged into the main repository. Here your working repository is a `fork` and the main Gutenberg repository is `upstream`. When working on new pull request you should always update your fork before you do `git checkout -b my-new-branch` to work on a feature or fix.
+Working on pull request starts with forking the Gutenberg repository, your separate working copy. Which can easily go out of sync as new pull requests are merged into the main repository. Here your working repository is a `fork` and the main Gutenberg repository is `upstream`. When working on new pull request you should always update your fork before you do `git checkout -b my-new-branch` to work on a feature or fix.
-To sync your fork you need to fetch the upstream changes and merge them into your fork. These are the corresponding commands:
+You will need to add an `upstream` remote in order to keep your fork updated.
+
+```sh
+git remote add upstream https://github.com/WordPress/gutenberg.git
+git remote -v
+origin git@github.com:your-account/gutenberg.git (fetch)
+origin git@github.com:your-account/gutenberg.git (push)
+upstream https://github.com/WordPress/gutenberg.git (fetch)
+upstream https://github.com/WordPress/gutenberg.git (push)
+```
+
+To sync your fork, you first need to fetch the upstream changes and merge them into your local copy:
``` sh
git fetch upstream
@@ -51,13 +62,13 @@ git checkout master
git merge upstream/master
```
-This will update you local copy to update your fork on github push your changes
+Once your local copy is updated, push your changes to update your fork on GitHub:
```
git push
```
-The above commands will update your `master` branch from _upstream_. To update any other branch replace `master` with the respective branch name.
+The above commands will update your `master` branch from _upstream_. To update any other branch replace `master` with the respective branch name.
## References
diff --git a/docs/contributors/native-mobile.md b/docs/contributors/native-mobile.md
new file mode 100644
index 00000000000000..08f718f7b033b9
--- /dev/null
+++ b/docs/contributors/native-mobile.md
@@ -0,0 +1,8 @@
+# React Native based mobile Gutenberg
+Intertwined with the web codepaths, the Gutenberg repo also includes the [React Native](https://facebook.github.io/react-native/) based mobile tree. The mobile client is packaged and released via the [official WordPress apps](https://wordpress.org/mobile/). Even though the build pipeline is rather different and lives in its own repo for now ([here's the native mobile repo](https://github.com/wordpress-mobile/gutenberg-mobile)), the source code itself is taken directly from this repo and the "web" side codepaths.
+## Native mobile specific files
+The majority of the code shared with native mobile is in the very same JavaScript module and SASS style files. In the cases where the code paths need to diverge, a `.native.js` or `.native.scss` variant of the file is created. In some cases, platform specific files can be also found for Android (`.android.js`) or iOS (`.ios.js`).
+## Mind the mobile
+Our tooling isn't as good yet as we'd like to and it's hard to have a good awareness of those native mobile files. That means that contributors need to manually pay attention to update the native mobile files during code refactorings. For example, renaming a function or a prop should also be performed in the native modules too, otherwise, the mobile client will break. We are in the process of putting some more safeguards in place in PRs, but we're still far from done. Please bear with us and thank you in advance. ❤️🙇
+## Debugging the native mobile unit tests
+Follow the instructions in [Native mobile testing](/docs/contributors/testing-overview.md#native-mobile-testing) to locally debug the native mobile unit tests when neeeded.
\ No newline at end of file
diff --git a/docs/contributors/release.md b/docs/contributors/release.md
index 8b3fb3f41b745b..717fb48707f688 100644
--- a/docs/contributors/release.md
+++ b/docs/contributors/release.md
@@ -214,16 +214,17 @@ For each Gutenberg plugin release, WordPress trunk should be synchronized with t
**Note:** The WordPress `trunk` branch can be closed or in "feature-freeze" mode. Usually, this happens between the first `beta` and the first `RC` of the WordPress release cycle. During this period, the Gutenberg plugin releases should not be synchronized with WordPress Core.
1. Ensure the WordPress `trunk` branch is open for enhancements.
-2. Check out the last published Gutenberg release branch `git checkout release/x.x`
-3. Create a Pull Request from this branch targeting `wp/trunk`.
-4. Merge the Pull Request using the "Rebase and Merge" button to keep the history of the commits.
+2. Get the last published Gutenberg release branch with `git fetch`.
+2. Check out the `wp/trunk` branch.
+3. Remove all files from the current branch: `git rm -r .`.
+4. Check out all the files from the release branch: `git checkout release/x.x -- .`.
+5. Commit all changes to the `wp/trunk` branch with `git commit -m "Merge changes published in the Gutenberg plugin vX.X release"` and push to the repository.
Now, the branch is ready to be used to publish the npm packages.
-1. Check out the `wp/trunk` branch.
-2. Run the [package release process] but when asked for the version numbers to choose for each package, (assuming the package versions are written using this format `major.minor.patch`) make sure to bump at least the `minor` version number. For example, if the CHANGELOG of the package to be released indicates that the next unreleased version is `5.6.1`, choose `5.7.0` as a version.
-3. Update the `CHANGELOG.md` files of the published packages with the new released versions and commit to the `wp/trunk` branch.
-4. Cherry-pick the "Publish" (created by Lerna) and the CHANGELOG update commits into the `master` branch of Gutenberg.
+1. Run the [package release process] but when asked for the version numbers to choose for each package, (assuming the package versions are written using this format `major.minor.patch`) make sure to bump at least the `minor` version number. For example, if the CHANGELOG of the package to be released indicates that the next unreleased version is `5.6.1`, choose `5.7.0` as a version.
+2. Update the `CHANGELOG.md` files of the published packages with the new released versions and commit to the `wp/trunk` branch.
+3. Cherry-pick the "Publish" (created by Lerna) and the CHANGELOG update commits into the `master` branch of Gutenberg.
Now, the npm packages should be ready and a patch can be created and committed into WordPress `trunk`.
diff --git a/docs/contributors/testing-overview.md b/docs/contributors/testing-overview.md
index ef2fab465927d3..f11330317c2ef3 100644
--- a/docs/contributors/testing-overview.md
+++ b/docs/contributors/testing-overview.md
@@ -27,7 +27,12 @@ Assuming you've followed the [instructions](/docs/contributors/getting-started.m
npm test
```
-Code style in JavaScript is enforced using [ESLint](http://eslint.org/). The above `npm test` will execute both unit tests and code linting. Code linting can be verified independently by running `npm run lint`. ESLint can also fix not all, but many issues automatically by running `npm run lint:fix`. To reduce the likelihood of unexpected build failures caused by code styling issues, you're encouraged to [install an ESLint integration for your editor](https://eslint.org/docs/user-guide/integrations) and/or create a [git pre-commit hook](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) containing the `npm run lint:fix` command.
+Linting is static code analysis used to enforce coding standards and to avoid potential errors. This project uses [ESLint](http://eslint.org/) and [TypeScript's JavaScript type-checking](https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html) to capture these issues. While the above `npm test` will execute both unit tests and code linting, code linting can be verified independently by running `npm run lint`. Some issues can be fixed automatically by running `npm run lint:fix`.
+
+To improve your developer workflow, you're encouraged to install an editor linting integration.
+
+- [ESLint Editor Integrations](https://eslint.org/docs/user-guide/integrations)
+- [TypeScript Editor Support](https://github.com/Microsoft/TypeScript/wiki/TypeScript-Editor-Support)
To run unit tests only, without the linter, use `npm run test-unit` instead.
@@ -342,6 +347,34 @@ test( 'should contain mars if planets is true', () => {
It's tempting to snapshot deep renders, but that makes for huge snapshots. Additionally, deep renders no longer test a single component, but an entire tree. With `shallow`, we snapshot just the components that are directly rendered by the component we want to test.
+### StoryShots
+
+> [StoryShots](https://www.npmjs.com/package/@storybook/addon-storyshots) adds automatic Jest Snapshot Testing for [Storybook](https://storybook.js.org/).
+
+Whenever a new story is added to Storybook, `npm run test-unit` needs to be executed to generate the corresponding snapshots. In the case when the existing story gets updated or removed, please refer to [Working with snapshots](#working-with-snapshots) section.
+
+#### Troubleshooting
+
+Sometimes we need to mock refs for some stories which use them. Check the following documents to learn more:
+- Why we need to use [Mocking Refs for Snapshot Testing](https://reactjs.org/blog/2016/11/16/react-v15.4.0.html#mocking-refs-for-snapshot-testing) with React.
+- [Using createNodeMock to mock refs](https://github.com/storybookjs/storybook/tree/master/addons/storyshots/storyshots-core#using-createnodemock-to-mock-refs) with StoryShots.
+
+In that case, you might see test failures and `TypeError` reported by Jest in the lines which try to access a property from `ref.current`. If this happens, search for `initStoryshots` method call, which contains all necessary configurations to adjust.
+## Native mobile testing
+
+Part of the unit-tests suite is a set of Jest tests run exercise native-mobile codepaths, developed in React Native. Since those tests run on Node, they can be launched locally on your development machine without the need for specific native Android or iOS dev tools or SDKs. It also means that they can be debugged using typical dev tools. Read on for instructions how to debug.
+
+### Debugging the native mobile unit tests
+
+To locally run the tests in debug mode, follow these steps:
+0. Make sure you have ran `npm ci` to install all the packages
+1. Run `npm run test-unit:native:debug` inside the Gutenberg root folder, on the CLI. Node is now waiting for the debugger to connect.
+2. Open `chrome://inspect` in Chrome
+3. Under the "Remote Target" section, look for a `../../node_modules/.bin/jest ` target and click on the "inspect" link. That will open a new window with the Chrome DevTools debugger attached to the process and stopped at the beginning of the `jest.js` file. Alternatively, if the targets are not visible, click on the `Open dedicated DevTools for Node` link in the same page.
+4. You can place breakpoints or `debugger;` statements throughout the code, including the tests code, to stop and inspect
+5. Click on the "Play" button to resume execution
+6. Enjoy debugging the native mobile unit tests!
+
## End to end Testing
If you're using the built-in [local environment](/docs/contributors/getting-started.md#local-environment), you can run the e2e tests locally using this command:
@@ -368,6 +401,25 @@ If you're using a different setup, you can provide the base URL, username and pa
WP_BASE_URL=http://localhost:8888 WP_USERNAME=admin WP_PASSWORD=password npm run test-e2e
```
+If you find that end-to-end tests pass when run locally, but fail in Travis, you may be able to isolate a CPU- or netowrk-bound race condition by simulating a slow CPU or network:
+
+```
+THROTTLE_CPU=4 npm run test-e2e
+```
+
+`THROTTLE_CPU` is a slowdown factor (in this example, a 4x slowdown multiplier)
+
+Related: https://chromedevtools.github.io/devtools-protocol/tot/Emulation#method-setCPUThrottlingRate
+
+```
+DOWNLOAD_THROUGHPUT=125000 npm run test-e2e
+```
+
+`DOWNLOAD_THROUGHPUT` is a numeric value representing bytes-per-second network download (in this example, a 1Mbps download speed).
+
+Related: https://chromedevtools.github.io/devtools-protocol/tot/Network#method-emulateNetworkConditions
+
+
### Core Block Testing
Every core block is required to have at least one set of fixture files for its main save function and one for each deprecation. These fixtures test the parsing and serialization of the block. See [the e2e tests fixtures readme](/packages/e2e-tests/fixtures/blocks/README.md) for more information and instructions.
diff --git a/docs/designers-developers/designers/animation.md b/docs/designers-developers/designers/animation.md
index 24948723e0d8c5..c0575e76eea823 100644
--- a/docs/designers-developers/designers/animation.md
+++ b/docs/designers-developers/designers/animation.md
@@ -14,7 +14,7 @@ Animation can help reinforce a sense of hierarchy and spatial orientation. This
- Animations should never block a user interaction. They should be fast, almost always complete in less than 0.2 seconds.
- A user should not have to wait for an animation to finish before they can interact.
-- Animations should be performant. Use `transform` CSS properties when you can, these render elements on the GPU, making them smooth.
+- Animations should be performant. Use `transform` CSS properties when you can, these render elements on the GPU, making them smooth.
- If an animation can't be made fast & performant, leave it out.
### Simple
@@ -26,15 +26,15 @@ Animation can help reinforce a sense of hierarchy and spatial orientation. This
In creating consistent animations, we have to establish physical rules for how elements behave when animated. When all animations follow these rules, they feel consistent, related, and predictable. An animation should match user expectations, if it doesn't, it's probably not the right animation for the job.
-Reuse animations if one already exists for your task.
+Reuse animations if one already exists for your task.
## Accessibility Considerations
- Animations should be subtle. Be cognizent of users with [vestibular disorders triggered by motion](https://www.ncbi.nlm.nih.gov/pubmed/29017000).
- Don't animate elements that are currently reporting content to adaptive technology (e.g., an `aria-live` region that's receiving updates). This can cause confusion wherein the technology tries to parse a region that's actively changing.
- Avoid animations that aren't directly triggered by user behaviors.
-- Whenever possible, ensure that animations respect the OS-level "Reduce Motion" settings. This can be done by utilizing the [`prefers-reduce-motion`](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion) media query. Gutenberg includes a `@reduce-motion` mixin for this, to be used alongside rules that include a CSS `animate` property.
+- Whenever possible, ensure that animations respect the OS-level "Reduce Motion" settings. This can be done by utilizing the [`prefers-reduced-motion`](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion) media query. Gutenberg includes a `@reduce-motion` mixin for this, to be used alongside rules that include a CSS `animate` property.
## Inventory of Reused Animations
-The generic `Animate` component is used to animate different parts of the interface. See [the component documentation](/packages/components/src/animate/README.md) for more details about the available animations.
+The generic `Animate` component is used to animate different parts of the interface. See [the component documentation](/packages/components/src/animate/README.md) for more details about the available animations.
diff --git a/docs/designers-developers/designers/block-design.md b/docs/designers-developers/designers/block-design.md
index 7ee481637bb225..03e13d3cc38818 100644
--- a/docs/designers-developers/designers/block-design.md
+++ b/docs/designers-developers/designers/block-design.md
@@ -56,7 +56,7 @@ In most cases, a block’s setup state is only shown once and then further custo
A block should have a straightforward, short name so users can easily find it in the Block Library. A block named "YouTube" is easy to find and understand. The same block, named "Embedded Video (YouTube)", would be less clear and harder to find in the Block Library.
-When referring to a block in documentation or UI, use title case for the block title, and lowercase for the "block" descriptor. For example:
+When referring to a block in documentation or UI, use title case for the block title and lowercase for the "block" descriptor. For example:
- Paragraph block
- Latest Posts block
@@ -86,7 +86,7 @@ Stick to a single imperative sentence with an action + subject format. Examples:
![A screenshot of a short block description](https://raw.githubusercontent.com/WordPress/gutenberg/master/docs/designers-developers/designers/assets/block-descriptions-do.png)
**Do:**
-Use a short, simple, block description.
+Use a short, simple block description.
![A screenshot of a long block description that includes branding](https://raw.githubusercontent.com/WordPress/gutenberg/master/docs/designers-developers/designers/assets/block-descriptions-dont.png)
**Don't:**
@@ -112,11 +112,11 @@ When selected, your block may surface additional options like input fields or bu
![A Google Maps block with inline, always-accessible controls required for the block to function](https://raw.githubusercontent.com/WordPress/gutenberg/master/docs/designers-developers/designers/assets/block-controls-do.png)
**Do:**
-For controls that are essential the the operation of the block, provide them directly in inside the block edit view.
+For controls that are essential for the operation of the block, provide them directly inside the block edit view.
![A Google Maps block with essential controls moved to the sidebar where they can be contextually hidden](https://raw.githubusercontent.com/WordPress/gutenberg/master/docs/designers-developers/designers/assets/block-controls-dont.png)
**Don't:**
-Do not put controls that are essential to the block in the sidebar, or the block will appear non-functional to mobile users, or desktop users who have dismissed the sidebar.
+Do not put controls that are essential to the block in the sidebar, otherwise the block will appear non-functional to mobile users or desktop users who have dismissed the sidebar.
### Advanced Block Settings
@@ -152,7 +152,7 @@ The most basic unit of the editor. The Paragraph block is a simple input field.
- Block Toolbar: Has a switcher to perform transformations to headings, etc.
- Block Toolbar: Has basic text alignments
-- Block Toolbar: Has inline formatting options, bold, italic, strikethrough and link
+- Block Toolbar: Has inline formatting options, bold, italic, strikethrough, and link
### Image
@@ -178,7 +178,7 @@ Basic image block.
- Has description: “They're worth 1,000 words! Insert a single image.”
- Has options for changing or adding alt text and adding additional custom CSS classes.
-_Future improvements to the Image block could include getting rid of the media modal, in place of letting users select images directly from the placeholder itself. In general, try to avoid modals._
+_Future improvements to the Image block could include getting rid of the media modal in place of letting users select images directly from the placeholder itself. In general, try to avoid modals._
### Latest Post
@@ -186,7 +186,7 @@ _Future improvements to the Image block could include getting rid of the media m
### Placeholder:
-Has no placeholder, as it works immediately upon insertion. The default inserted state shows the last 5 posts.
+Has no placeholder as it works immediately upon insertion. The default inserted state shows the last 5 posts.
### Selected state:
@@ -200,4 +200,4 @@ _Note that the Block Toolbar does not include the Block Chip in this case, since
- Has description: “Display a list of your most recent posts.”
- Has options for post order, narrowing the list by category, changing the default number of posts to show, and showing the post date.
-_Latest Posts is fully functional as soon as it’s inserted, because it comes with good defaults._
+_Latest Posts is fully functional as soon as it’s inserted because it comes with good defaults._
diff --git a/docs/designers-developers/developers/backward-compatibility/README.md b/docs/designers-developers/developers/backward-compatibility/README.md
index bd559617c5b17f..da58849dec3223 100644
--- a/docs/designers-developers/developers/backward-compatibility/README.md
+++ b/docs/designers-developers/developers/backward-compatibility/README.md
@@ -1 +1,65 @@
# Backward Compatibility
+
+Historically, WordPress has been known for preserving backward compatibility across versions. Gutenberg follows this example wherever possible in its production public APIs. There are rare occasions where breaking backward compatibility is unavoidable and in those cases the breakage:
+
+* Should be constrained as much as possible to a small surface area of the API.
+* Should be documented as clearly as possible to third-party developers using Dev Notes.
+
+## What qualifies as a production public API
+
+The Gutenberg code base is composed of two different types of packages:
+ - **production packages**: these are packages that are shipped as WordPress scripts (example: wp-components, wp-editor...).
+ - **development packages**: these are made up of developer tools that can be used by third-party developers to lint, test, format and build their themes and plugins (example: @wordpress/scrips, @wordpress/env...). Typically, these are consumed as npm dependencies in third-party projects.
+
+Backward compatibility guarantees only apply to the production packages, as updates happen through WordPress upgrades.
+
+Production packages use the `wp` global variable to provide APIs to third-party developers. These APIs can be JavaScript functions, variables and React components.
+
+### How to preserve backward compatibility for a JavaScript function
+
+* The name of the function should not change.
+* The order of the arguments of the function should not change.
+* The function's returned value type should not change.
+* Changes to arguments (new arguments, modification of semantics) is possible if we guarantee that all previous calls are still possible.
+
+### How to preserve backward compatibility for a React Component
+
+* The name of the component should not change.
+* The props of the component should not be removed.
+* Existing prop values should continue to be supported. If a component accepts a function as a prop, we can update the component to accept a new type for the same prop, but it shouldn't break existing usage.
+* Adding new props is allowed.
+* React Context dependencies can only be added or removed if we ensure the previous context contract is not breaking.
+
+### How to preserve backward compatibility for a Block
+
+* Existing usage of the block should not break or be marked as invalid when the editor is loaded.
+* The styling of the existing blocks should be guaranteed.
+* Markup changes should be limited to the minimum possible, but if a block needs to change its saved markup, making previous versions invalid, a [**deprecated version**](/docs/designers-developers/developers/block-api/block-deprecation.md) of the block should be added.
+
+## Class names and DOM updates
+
+Class names and DOM nodes used inside the tree of React components are not considered part of the public API and can be modified.
+
+Changes to these should be done with caution as it can affect the styling and behavior of third-party code (Even if they should not rely on these in the first place). Keep the old ones if possible. If not, document the changes and write a dev note.
+
+## Deprecations
+
+As the project evolves, flaws of existing APIs are discovered, or updates are required to support new features. When this happens, we try to guarantee that existing APIs don't break and build new alternative APIs.
+
+To encourage third-party developers to adopt the new APIs instead, we can use the [**deprecated**](/packages/deprecated/README.md) helper to show a message explaining the deprecation and propose the alternative whenever the old API is used.
+
+## Dev Notes
+
+Dev notes are [posts published on the make/core site](https://make.wordpress.org/core/tag/dev-notes/) prior to WordPress releases to inform third-party developers about important changes to the developer APIs, these changes can include:
+* New APIs.
+* Changes to existing APIs that might affect existing plugins and themes. (Example: classname changes...)
+* Unavoidable backward compatibility breakage, with reasoning and migration flows.
+* Important deprecations (even without breakage), with reasoning and migration flows.
+
+### Dev Note Workflow
+
+* When working on a pull request and the need for a dev note is discovered, add the **Needs Dev Note** label to the PR.
+* If possible, add a comment to the PR explaining why the dev note is needed.
+* When the first beta of the upcoming WordPress release is shipped, go through the list of merged PRs included in the release that are tagged with the **Needs Dev Note** label.
+* For each one of these PRs, write a dev note and coordinate with the WordPress release leads to publish the dev note.
+* Once the dev note for a PR is published, remove the **Needs Dev Note** label from the PR.
diff --git a/docs/designers-developers/developers/block-api/block-deprecation.md b/docs/designers-developers/developers/block-api/block-deprecation.md
index 4645b3b5207d6b..bc94305a8bbe72 100644
--- a/docs/designers-developers/developers/block-api/block-deprecation.md
+++ b/docs/designers-developers/developers/block-api/block-deprecation.md
@@ -10,12 +10,12 @@ A block can have several deprecated versions. A deprecation will be tried if a p
Deprecations are defined on a block type as its `deprecated` property, an array of deprecation objects where each object takes the form:
- `attributes` (Object): The [attributes definition](/docs/designers-developers/developers/block-api/block-attributes.md) of the deprecated form of the block.
-- `support` (Object): The [supports definition](/docs/designers-developers/developers/block-api/block-registration.md) of the deprecated form of the block.
+- `supports` (Object): The [supports definition](/docs/designers-developers/developers/block-api/block-registration.md) of the deprecated form of the block.
- `save` (Function): The [save implementation](/docs/designers-developers/developers/block-api/block-edit-save.md) of the deprecated form of the block.
- `migrate` (Function, Optional): A function which, given the old attributes and inner blocks is expected to return either the new attributes or a tuple array of `[ attributes, innerBlocks ]` compatible with the block.
- `isEligible` (Function, Optional): A function which, given the attributes and inner blocks of the parsed block, returns true if the deprecation can handle the block migration. This is particularly useful in cases where a block is technically valid even once deprecated, and requires updates to its attributes or inner blocks.
-It's important to note that `attributes`, `support`, and `save` are not automatically inherited from the current version, since they can impact parsing and serialization of a block, so they must be defined on the deprecated object in order to be processed during a migration.
+It's important to note that `attributes`, `supports`, and `save` are not automatically inherited from the current version, since they can impact parsing and serialization of a block, so they must be defined on the deprecated object in order to be processed during a migration.
### Example:
diff --git a/docs/designers-developers/developers/block-api/block-registration.md b/docs/designers-developers/developers/block-api/block-registration.md
index 6cc028ab8c94ff..8faef83ce92e33 100644
--- a/docs/designers-developers/developers/block-api/block-registration.md
+++ b/docs/designers-developers/developers/block-api/block-registration.md
@@ -1,6 +1,6 @@
# Block Registration
-## `register_block_type`
+## `registerBlockType`
* **Type:** `Function`
@@ -439,6 +439,24 @@ transforms: {
```
{% end %}
+In the case of shortcode transforms, `isMatch` receives shortcode attributes per the [Shortcode API](https://codex.wordpress.org/Shortcode_API):
+
+{% codetabs %}
+{% ES5 %}
+```js
+isMatch: function( attributes ) {
+ return attributes.named.id === 'my-id';
+},
+```
+{% ESNext %}
+```js
+isMatch( { named: { id } } ) {
+ return id === 'my-id';
+},
+```
+{% end %}
+
+
To control the priority with which a transform is applied, define a `priority` numeric property on your transform object, where a lower value will take precedence over higher values. This behaves much like a [WordPress hook](https://codex.wordpress.org/Plugin_API#Hook_to_WordPress). Like hooks, the default priority is `10` when not otherwise set.
A file can be dropped into the editor and converted into a block with a matching transform.
diff --git a/docs/designers-developers/developers/data/data-core-block-editor.md b/docs/designers-developers/developers/data/data-core-block-editor.md
index eb9201165dafd6..b88bccc641bf74 100644
--- a/docs/designers-developers/developers/data/data-core-block-editor.md
+++ b/docs/designers-developers/developers/data/data-core-block-editor.md
@@ -189,6 +189,20 @@ _Returns_
- `Array`: Ordered client IDs of editor blocks.
+# **getBlockParents**
+
+Given a block client ID, returns the list of all its parents from top to bottom.
+
+_Parameters_
+
+- _state_ `Object`: Editor state.
+- _clientId_ `string`: Block from which to find root client ID.
+- _ascending_ `boolean`: Order results from bottom to top (true) or top to bottom (false).
+
+_Returns_
+
+- `Array`: ClientIDs of the parent blocks.
+
# **getBlockRootClientId**
Given a block client ID, returns the root block from which the block is
@@ -345,7 +359,24 @@ _Parameters_
_Returns_
-- `Array`: Items that appear in inserter.
+- `Array`: Items that appear in inserter.
+
+_Type Definition_
+
+- _WPEditorInserterItem_ `Object`
+
+_Properties_
+
+- _id_ `string`: Unique identifier for the item.
+- _name_ `string`: The type of block to create.
+- _initialAttributes_ `Object`: Attributes to pass to the newly created block.
+- _title_ `string`: Title of the item, as it appears in the inserter.
+- _icon_ `string`: Dashicon for the item, as it appears in the inserter.
+- _category_ `string`: Block category that the item is associated with.
+- _keywords_ `Array`: Keywords that can be searched to find this item.
+- _isDisabled_ `boolean`: Whether or not the user should be prevented from inserting this item.
+- _utility_ `number`: How useful we think this item is, between 0 and 3.
+- _frecency_ `number`: Hueristic that combines frequency and recency.
# **getLastMultiSelectedBlockClientId**
@@ -360,6 +391,19 @@ _Returns_
- `?string`: Last block client ID in the multi-selection set.
+# **getLowestCommonAncestorWithSelectedBlock**
+
+Given a block client ID, returns the lowest common ancestor with selected client ID.
+
+_Parameters_
+
+- _state_ `Object`: Editor state.
+- _clientId_ `string`: Block from which to find common ancestor client ID.
+
+_Returns_
+
+- `string`: Common ancestor client ID or undefined
+
# **getMultiSelectedBlockClientIds**
Returns the current multi-selection set of block client IDs, or an empty
@@ -726,6 +770,18 @@ _Returns_
- `boolean`: Whether the caret is within formatted text.
+# **isDraggingBlocks**
+
+Returns true if the user is dragging blocks, or false otherwise.
+
+_Parameters_
+
+- _state_ `Object`: Global application state.
+
+_Returns_
+
+- `boolean`: Whether user is dragging blocks.
+
# **isFirstMultiSelectedBlock**
Returns true if a multi-selection exists, and the block corresponding to the
@@ -1045,6 +1101,20 @@ _Returns_
- `Object`: Action object.
+# **resetSelection**
+
+Returns an action object used in signalling that selection state should be
+reset to the specified selection.
+
+_Parameters_
+
+- _selectionStart_ `WPBlockSelection`: The selection start.
+- _selectionEnd_ `WPBlockSelection`: The selection end.
+
+_Returns_
+
+- `Object`: Action object.
+
# **selectBlock**
Returns an action object used in signalling that the block with the
@@ -1097,16 +1167,12 @@ _Parameters_
# **setNavigationMode**
-Returns an action object used to enable or disable the navigation mode.
+Generators that triggers an action used to enable or disable the navigation mode.
_Parameters_
- _isNavigationMode_ `string`: Enable/Disable navigation mode.
-_Returns_
-
-- `Object`: Action object
-
# **setTemplateValidity**
Returns an action object resetting the template validity.
@@ -1133,6 +1199,14 @@ _Returns_
- `Object`: Action object.
+# **startDraggingBlocks**
+
+Returns an action object used in signalling that the user has begun to drag blocks.
+
+_Returns_
+
+- `Object`: Action object.
+
# **startMultiSelect**
Returns an action object used in signalling that a block multi-selection has started.
@@ -1149,6 +1223,14 @@ _Returns_
- `Object`: Action object.
+# **stopDraggingBlocks**
+
+Returns an action object used in signalling that the user has stopped dragging blocks.
+
+_Returns_
+
+- `Object`: Action object.
+
# **stopMultiSelect**
Returns an action object used in signalling that block multi-selection stopped.
diff --git a/docs/designers-developers/developers/data/data-core-edit-post.md b/docs/designers-developers/developers/data/data-core-edit-post.md
index 93efda1bd0bc4f..49801a69817be8 100644
--- a/docs/designers-developers/developers/data/data-core-edit-post.md
+++ b/docs/designers-developers/developers/data/data-core-edit-post.md
@@ -80,11 +80,11 @@ _Parameters_
- _state_ `Object`: Global application state.
- _preferenceKey_ `string`: Preference Key.
-- _defaultValue_ `Mixed`: Default Value.
+- _defaultValue_ `*`: Default Value.
_Returns_
-- `Mixed`: Preference Value.
+- `*`: Preference Value.
# **getPreferences**
diff --git a/docs/designers-developers/developers/data/data-core-editor.md b/docs/designers-developers/developers/data/data-core-editor.md
index 8b20edac6d37c1..9cd27c390b29ea 100644
--- a/docs/designers-developers/developers/data/data-core-editor.md
+++ b/docs/designers-developers/developers/data/data-core-editor.md
@@ -359,6 +359,30 @@ _Returns_
- `Array`: Block list.
+# **getEditorSelectionEnd**
+
+Returns the current selection end.
+
+_Parameters_
+
+- _state_ `Object`:
+
+_Returns_
+
+- `WPBlockSelection`: The selection end.
+
+# **getEditorSelectionStart**
+
+Returns the current selection start.
+
+_Parameters_
+
+- _state_ `Object`:
+
+_Returns_
+
+- `WPBlockSelection`: The selection start.
+
# **getEditorSettings**
Returns the post editor settings.
@@ -1103,6 +1127,23 @@ _Related_
- insertDefaultBlock in core/block-editor store.
+# **lockPostAutosaving**
+
+Returns an action object used to signal that post autosaving is locked.
+
+_Usage_
+
+ // Lock post autosaving with the lock key `mylock`:
+ wp.data.dispatch( 'core/editor' ).lockPostAutosaving( 'mylock' );
+
+_Parameters_
+
+- _lockName_ `string`: The lock name.
+
+_Returns_
+
+- `Object`: Action object
+
# **lockPostSaving**
Returns an action object used to signal that post saving is locked.
@@ -1362,6 +1403,23 @@ Action generator for trashing the current post in the editor.
Returns an action object used in signalling that undo history should pop.
+# **unlockPostAutosaving**
+
+Returns an action object used to signal that post autosaving is unlocked.
+
+_Usage_
+
+ // Unlock post saving with the lock key `mylock`:
+ wp.data.dispatch( 'core/editor' ).unlockPostAutosaving( 'mylock' );
+
+_Parameters_
+
+- _lockName_ `string`: The lock name.
+
+_Returns_
+
+- `Object`: Action object
+
# **unlockPostSaving**
Returns an action object used to signal that post saving is unlocked.
diff --git a/docs/designers-developers/developers/data/data-core-nux.md b/docs/designers-developers/developers/data/data-core-nux.md
index e937601ec864b6..92dcf6be1d0ac2 100644
--- a/docs/designers-developers/developers/data/data-core-nux.md
+++ b/docs/designers-developers/developers/data/data-core-nux.md
@@ -30,7 +30,7 @@ _Parameters_
_Returns_
-- `?NUX.GuideInfo`: Information about the associated guide.
+- `?NUXGuideInfo`: Information about the associated guide.
# **isTipVisible**
diff --git a/docs/designers-developers/developers/data/data-core.md b/docs/designers-developers/developers/data/data-core.md
index ce0cda7d3542a3..79f3f41991c08f 100644
--- a/docs/designers-developers/developers/data/data-core.md
+++ b/docs/designers-developers/developers/data/data-core.md
@@ -512,7 +512,7 @@ a given URl has been received.
_Parameters_
- _url_ `string`: URL to preview the embed for.
-- _preview_ `Mixed`: Preview data.
+- _preview_ `*`: Preview data.
_Returns_
diff --git a/docs/designers-developers/developers/themes/block-based-themes.md b/docs/designers-developers/developers/themes/block-based-themes.md
new file mode 100644
index 00000000000000..926c4031d2bd67
--- /dev/null
+++ b/docs/designers-developers/developers/themes/block-based-themes.md
@@ -0,0 +1,98 @@
+# Block-based Themes (Experimental)
+
+> This is the documentation for the current implementation of block-based themes, also known as Full Site Editing or Block Content Areas. These features are still experimental in the plugin. “Experimental” means this is just an early implementation that is subject to potential drastic and breaking changes in iterations based on feedback from users, contributors and theme authors.
+
+> Documentation has been shared early to surface what’s being worked on and invite feedback from those experimenting with the APIs. You can provide feedback in the weekly #core-editor chats where the latest progress of this effort will be shared and discussed, or async via Github issues.
+
+**Note:** In order to use these features, make sure to enable the "Full Site Editing" flag from the **Experiments** page of the Gutenberg plugin.
+
+## What is a block-based theme?
+
+A block-based theme is a WordPress theme with templates entirely composed of blocks so that in addition to the post content of the different post types (pages, posts, ...), the block editor can also be used to edit all areas of the site: headers, footers, sidebars, etc.
+
+## What is the structure of a block-based theme?
+
+A very simple block-based theme is structured like so:
+
+```
+theme
+|__ style.css
+|__ functions.php
+|__ block-templates
+ |__ index.html
+ |__ single.html
+ |__ archive.html
+ |__ ...
+|__ block-template-parts
+ |__ header.html
+ |__ footer.html
+ |__ sidebar.html
+ |__ ...
+```
+
+The difference with existing WordPress themes is that the different templates in the template hierarchy, and template parts, are block templates instead of php files.
+
+## What is a block template?
+
+A block template is made up of a list of blocks. Any WordPress block can be used in a template. Templates can also reuse parts of their content using "Template Parts". For example, all the block templates can have the same header included from a separate `header.html` template part.
+
+Here's an example of a block template:
+
+```html
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Footer
+
+
+
+
+```
+
+## How to write and edit these templates?
+
+Ultimately, any WordPress user with the correct capabilities (example: `administrator` WordPress role) will be able to access these templates in the WordPress admin, edit them in dedicated views and potentially export them as a theme.
+
+In the current iteration (at the time of writing this doc), you can navigate to the temporary "Templates" admin menu under "Appearance" `wp-admin/edit.php?post_type=wp_template` and use this as a playground to edit your templates.
+
+When ready, switch to the "Code editor" mode and grab the HTML of the template from there and put it in the right file in your theme directory.
+
+## Templates CPT
+
+If you save the templates directly from the temporary Templates admin menu, you'll be able to override your theme's templates.
+
+Example: By using **single** as the title for your template and saving it, this saved template will take precedence over your theme's `single.html` file.
+
+Note that it won't take precedence over any of your theme's templates with higher specificity in the template hierarchy. Resolution goes from most to least specific, looking first for a CPT post and then for a theme template, at each level.
+
+## Theme Blocks
+
+Some blocks have been made specifically for block-based themes. For example, you'll most likely use the **Site Title** block in your site's header while your **single** block template will most likely include a **Post Title** and a **Post Content** block.
+
+As we're still early in the process, the number of blocks specifically dedicated to these block templates is relatively small but more will be added as we move forward with the project.
+
+## Styling
+
+One of the most important aspects of themes (if not the most important) is the styling. While initially you'll be able to provide styles and enqueue them using the same hooks themes have always used, this is an area that is still [being explored](https://github.com/WordPress/gutenberg/issues/9534).
+
+## Resources
+
+- [Full Site Editing](https://github.com/WordPress/gutenberg/labels/%5BFeature%5D%20Full%20Site%20Editing) label.
diff --git a/docs/designers-developers/developers/themes/theme-support.md b/docs/designers-developers/developers/themes/theme-support.md
index 210072f5d2cf0b..a6d8548fb9cfdc 100644
--- a/docs/designers-developers/developers/themes/theme-support.md
+++ b/docs/designers-developers/developers/themes/theme-support.md
@@ -134,6 +134,46 @@ Themes are responsible for creating the classes that apply the colors in differe
The class name is built appending 'has-', followed by the class name _using_ kebab case and ending with the context name.
+### Block Gradient Presets
+
+Different blocks have the possibility of selecting from a list of predefined gradients. The block editor provides a default gradient presets, but a theme can overwrite them and provide its own:
+
+```php
+add_theme_support(
+ '__experimental-editor-gradient-presets',
+ array(
+ array(
+ 'name' => __( 'Vivid cyan blue to vivid purple', 'themeLangDomain' ),
+ 'gradient' => 'linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)',
+ 'slug' => 'vivid-cyan-blue-to-vivid-purple'
+ ),
+ array(
+ 'name' => __( 'Vivid green cyan to vivid cyan blue', 'themeLangDomain' ),
+ 'gradient' => 'linear-gradient(135deg,rgba(0,208,132,1) 0%,rgba(6,147,227,1) 100%)',
+ 'slug' => 'vivid-green-cyan-to-vivid-cyan-blue',
+ ),
+ array(
+ 'name' => __( 'Light green cyan to vivid green cyan', 'themeLangDomain' ),
+ 'gradient' => 'linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%)',
+ 'slug' => 'light-green-cyan-to-vivid-green-cyan',
+ ),
+ array(
+ 'name' => __( 'Luminous vivid amber to luminous vivid orange', 'themeLangDomain' ),
+ 'gradient' => 'linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%)',
+ 'slug' => 'luminous-vivid-amber-to-luminous-vivid-orange',
+ ),
+ array(
+ 'name' => __( 'Luminous vivid orange to vivid red', 'themeLangDomain' ),
+ 'gradient' => 'linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%)',
+ 'slug' => 'luminous-vivid-orange-to-vivid-red',
+ ),
+ )
+);
+```
+
+`name` is a human-readable label (demonstrated above) that appears in the tooltip and provides a meaningful description of the gradient to users. It is especially important for those who rely on screen readers or would otherwise have difficulty perceiving the color. `gradient` is a CSS value of a gradient applied to a background-image of the block. Details of valid gradient types can be found in the [mozilla documentation](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Images/Using_CSS_gradients). `slug` is a unique identifier for the gradient and is used to generate the CSS classes used by the block editor.
+
+
### Block Font Sizes:
Blocks may allow the user to configure the font sizes they use, e.g., the paragraph block. The block provides a default set of font sizes, but a theme can overwrite it and provide its own:
diff --git a/docs/designers-developers/developers/tutorials/block-tutorial/creating-dynamic-blocks.md b/docs/designers-developers/developers/tutorials/block-tutorial/creating-dynamic-blocks.md
index a8a3141da990e7..d73c1f2f7232e1 100644
--- a/docs/designers-developers/developers/tutorials/block-tutorial/creating-dynamic-blocks.md
+++ b/docs/designers-developers/developers/tutorials/block-tutorial/creating-dynamic-blocks.md
@@ -152,11 +152,11 @@ Gutenberg 2.8 added the [``](/packages/components/src/server-s
{% codetabs %}
{% ES5 %}
```js
-( function( blocks, element, components ) {
+( function( blocks, element, serverSideRender ) {
var el = element.createElement,
registerBlockType = blocks.registerBlockType,
- ServerSideRender = components.ServerSideRender;
+ ServerSideRender = serverSideRender;
registerBlockType( 'gutenberg-examples/example-05-dynamic', {
title: 'Example: last post',
@@ -176,13 +176,13 @@ Gutenberg 2.8 added the [``](/packages/components/src/server-s
}(
window.wp.blocks,
window.wp.element,
- window.wp.components,
+ window.wp.serverSideRender,
) );
```
{% ESNext %}
```js
import { registerBlockType } from '@wordpress/blocks';
-import { ServerSideRender } from '@wordpress/components';
+import ServerSideRender from '@wordpress/server-side-render';
registerBlockType( 'gutenberg-examples/example-05-dynamic', {
title: 'Example: last post',
diff --git a/docs/designers-developers/developers/tutorials/block-tutorial/writing-your-first-block-type.md b/docs/designers-developers/developers/tutorials/block-tutorial/writing-your-first-block-type.md
index 77496681ce4847..81794c30be53fb 100644
--- a/docs/designers-developers/developers/tutorials/block-tutorial/writing-your-first-block-type.md
+++ b/docs/designers-developers/developers/tutorials/block-tutorial/writing-your-first-block-type.md
@@ -107,4 +107,6 @@ Once a block is registered, you should immediately see that it becomes available
A block name must be prefixed with a namespace specific to your plugin. This helps prevent conflicts when more than one plugin registers a block with the same name. In this example, the namespace is `gutenberg-examples`.
+Block names _must_ include only lowercase alphanumeric characters or dashes and start with a letter. Example: `my-plugin/my-custom-block`.
+
The `edit` and `save` functions describe the structure of your block in the context of the editor and the saved content respectively. While the difference is not obvious in this simple example, in the following sections we'll explore how these are used to enable customization of the block in the editor preview.
diff --git a/docs/designers-developers/developers/tutorials/javascript/js-build-setup.md b/docs/designers-developers/developers/tutorials/javascript/js-build-setup.md
index 2f9d498ef053a0..2499feb6be24b7 100644
--- a/docs/designers-developers/developers/tutorials/javascript/js-build-setup.md
+++ b/docs/designers-developers/developers/tutorials/javascript/js-build-setup.md
@@ -4,19 +4,23 @@ This page covers how to set up your development environment to use the ESNext an
This documentation covers development for your plugin to work with the Gutenberg project (ie: the block editor). If you want to develop Gutenberg itself, see the [Getting Started](/docs/contributors/getting-started.md) documentation.
-Most browsers can not interpret or run ESNext and JSX syntaxes, so we use a transformation step to convert these syntaxes to code that browsers can understand.
+Most browsers cannot interpret or run ESNext and JSX syntaxes, so we use a transformation step to convert these syntaxes to code that browsers can understand.
-There are a few reasons to use ESNext and the extra step. First, it makes for simpler code that is easier to read and write. Using a transformation step allows for tools to optimize the code to work on the widest variety of browsers. Also, by using a build step you can organize your code into smaller modules and files that can be bundled together into a single download.
+There are a few reasons to use ESNext and this extra step of transformation:
+
+- It makes for simpler code that is easier to read and write.
+- Using a transformation step allows for tools to optimize the code to work on the widest variety of browsers.
+- By using a build step you can organize your code into smaller modules and files that can be bundled together into a single download.
There are different tools that can perform this transformation or build step; WordPress uses webpack and Babel.
-[webpack](https://webpack.js.org/) is a pluggable tool that processes JavaScript, creating a compiled bundle that runs in a browser. [Babel](https://babeljs.io/) transforms JavaScript from one format to another. You use Babel as a plugin to webpack to transform both ESNext and JSX to JavaScript.
+[webpack](https://webpack.js.org/) is a pluggable tool that processes JavaScript and creates a compiled bundle that runs in a browser. [Babel](https://babeljs.io/) transforms JavaScript from one format to another. You use Babel as a plugin to webpack to transform both ESNext and JSX to JavaScript.
-The [@wordpress/scripts](https://www.npmjs.com/package/@wordpress/scripts) package abstracts these libraries away to standardize and simplify development, so you won't need to handle the details for configuring those libraries. See the package documentation for configuration details.
+The [@wordpress/scripts](https://www.npmjs.com/package/@wordpress/scripts) package abstracts these libraries away to standardize and simplify development, so you won't need to handle the details for configuring webpack or babel. See the [@wordpress/scripts package documentation](https://developer.wordpress.org/block-editor/packages/packages-scripts/) for configuration details.
## Quick Start
-For a quick start, you can use one of the examples from the [Gutenberg Examples repository](https://github.com/wordpress/gutenberg-examples/). Each one of the `-esnext` directories contain the necessary files for working with ESNext and JSX.
+If you prefer a quick start, you can use one of the examples from the [Gutenberg Examples repository](https://github.com/wordpress/gutenberg-examples/) and skip below. Each one of the `-esnext` directories in the examples repository contain the necessary files for working with ESNext and JSX.
## Setup
@@ -24,7 +28,7 @@ Both webpack and Babel are tools written in JavaScript and run using [Node.js](h
First, you need to set up Node.js for your development environment. The steps required depend on your operating system, if you have a package manager installed, setup can be as straightforward as:
-- Ubuntu: `apt install node`
+- Ubuntu: `apt install nodejs npm`
- macOS: `brew install node`
- Windows: `choco install node`
@@ -87,11 +91,11 @@ Also, if you look at package.json file it will include a new section:
```json
"devDependencies": {
- "@wordpress/scripts": "5.0.0"
+ "@wordpress/scripts": "6.0.0"
}
```
-## Webpack & Babel
+## Setting Up wp-scripts build
The `@wordpress/scripts` package handles the dependencies and default configuration for webpack and Babel. The scripts package expects the source file to compile to be found at `src/index.js`, and will save the compiled output to `build/index.js`.
@@ -119,7 +123,7 @@ To configure npm to run a script, you use the scripts section in `package.json`
You can then run the build using: `npm run build`.
-After the build finishes, you will see the built file created at `build/index.js`. Enqueue this file in the admin screen as you would any JavaScript in WordPress, see [Step 2 in this tutorial](loading-javascript.md), and the block will load in the editor.
+After the build finishes, you will see the built file created at `build/index.js`. Enqueue this file in the admin screen as you would any JavaScript in WordPress, see [Step 2 Loading JavaScript](loading-javascript.md), and the block will load in the editor.
## Finishing Touches
@@ -148,7 +152,7 @@ Likewise, you do not need to include `node_modules` or any of the above configur
### Dependency Management
-Using wp-scripts ver 5.0.0+ build step will also produce a `index.asset.php` file that contains an array of dependencies and version number for your block. For our simple example above is something like:
+Using wp-scripts ver 5.0.0+ the build step will also produce a `index.asset.php` file that contains an array of dependencies and version number for your block. For our simple example above is something like:
`array('dependencies' => array('wp-element', 'wp-polyfill'), 'version' => 'fc93c4a9675c108725227db345898bcc');`
Here is how to use this asset file to automatically set the dependency list for enqueuing the script. This prevents having to manually update the dependencies, it will be created based on the package imports used within your block.
diff --git a/docs/designers-developers/developers/tutorials/javascript/readme.md b/docs/designers-developers/developers/tutorials/javascript/readme.md
index af8a895461e412..af06c6c4c6acaf 100644
--- a/docs/designers-developers/developers/tutorials/javascript/readme.md
+++ b/docs/designers-developers/developers/tutorials/javascript/readme.md
@@ -17,3 +17,5 @@ The block editor introduced in WordPress 5.0 is written in JavaScript, with the
4. [Troubleshooting](/docs/designers-developers/developers/tutorials/javascript/troubleshooting.md)
5. [JavaScript Versions and Building](/docs/designers-developers/developers/tutorials/javascript/versions-and-building.md)
6. [Scope your code](/docs/designers-developers/developers/tutorials/javascript/scope-your-code.md)
+7. [JavaScript Build Step](/docs/designers-developers/developers/tutorials/javascript/js-build-setup.md)
+
diff --git a/docs/designers-developers/key-concepts.md b/docs/designers-developers/key-concepts.md
index d7f16578f90f87..f7cce56235d17c 100644
--- a/docs/designers-developers/key-concepts.md
+++ b/docs/designers-developers/key-concepts.md
@@ -4,7 +4,7 @@
Blocks are an abstract unit for organizing and composing content, strung together to create content for a webpage.
-Blocks are hierarchical, in that a block can be a child or parent to another block. One example is a two-column Columns block can be the parent block to multiple child blocks in each column.
+Blocks are hierarchical in that a block can be a child of or parent to another block. For example, a two-column Columns block can be the parent block to multiple child blocks in each of its columns.
If it helps, you can think of blocks as a more graceful shortcode, with rich formatting tools for users to compose content. To this point, there is a new Block Grammar. Distilled, the block grammar is an HTML comment, either a self-closing tag or with a beginning tag and ending tag. In the main tag, depending on the block type and user customizations, there can be a JSON object. This raw form of the block is referred to as serialized.
@@ -16,15 +16,15 @@ If it helps, you can think of blocks as a more graceful shortcode, with rich for
Blocks can be static or dynamic. Static blocks contain rendered content and an object of Attributes used to re-render based on changes. Dynamic blocks require server-side data and rendering while the post content is being generated (rendering).
-Each block contains Attributes or configuration settings, which can be sourced from raw HTML in the content, via meta or other customizable origins.
+Each block contains Attributes or configuration settings, which can be sourced from raw HTML in the content via meta or other customizable origins.
-The Paragraph is the default block. Instead of a new line upon typing return on a keyboard, try to think of it as an empty Paragraph block (type / to trigger an autocompleting Slash Inserter -- /image will pull up Images as well as Instagram embeds).
+The Paragraph is the default block. Instead of a new line upon typing `return` on a keyboard, try to think of it as an empty Paragraph block (type "/" to trigger an autocompleting Slash Inserter -- "/image" will pull up Images as well as Instagram embeds).
-Users insert new blocks by clicking the plus button for the Block Inserter, typing / for the Slash Inserter or typing return for a blank Paragraph block.
+Users insert new blocks by clicking the plus button for the Block Inserter, typing "/" for the Slash Inserter, or typing `return` for a blank Paragraph block.
Blocks can be duplicated within content using the menu from the block's toolbar or via keyboard shortcut.
-Blocks can be made repeatable, shared across posts and post types and used multiple times in the same post. Changes in one place reflect everywhere that reusable block is used.
+Blocks can also be made repeatable, allowing them to be shared across posts and post types and/or used multiple times in the same post. If a reusable block is edited in one place, those changes are reflected everywhere that that block is used.
Blocks can be limited or locked-in-place by Templates and custom code.
@@ -36,43 +36,43 @@ Blocks can be limited or locked-in-place by Templates and custom code.
## Block Categories
-In the Block Inserter, the accordion-sorted, popup modal that shows a site's available blocks to users, each accordion title is a Block Category, which are either the defaults or customized by developers through Plugins or code.
+In the Block Inserter (the accordion-sorted, popup modal that shows a site's available blocks to users) each accordion title is a Block Category, which are either the defaults or customized by developers through Plugins or code.
## Reusable Blocks
Reusable Blocks are a way to share a block (or multiple blocks) as a reusable, repeatable piece of content.
-Any edits to a reusable block are made to every usage of a repeatable block.
+Any edits to a reusable block are made to every usage of that repeatable block.
-Reusable Blocks are stored as a hidden post type, and are dynamic blocks that "ref" or reference the post_id and return the post_content for that wp_block.
+Reusable Blocks are stored as a hidden post type and are dynamic blocks that "ref" or reference the post_id and return the post_content for that wp_block.
## Templates
At the core of Gutenberg lies the concept of the block. From a technical point of view, blocks both raise the level of abstraction from a single document to a collection of meaningful elements, and they replace ambiguity—inherent in HTML—with explicit structure. A post in Gutenberg is then a _collection of blocks_.
-To understand how blocks operate at a data-structure level, let's take a small detour to the simile of the printing press of Johannes Gutenberg. In letterpress, a finished page was assembled from individual characters, a test print made in a [galley](https://en.wikipedia.org/wiki/Galley_proof), and then locked into a [chase](https://en.wikipedia.org/wiki/Chase_(printing)) to create a fully formed page. Once printed, there's no need to know whether it was set via individual letters, type slugs from a [linotype machine](https://en.wikipedia.org/wiki/Linotype_machine), or even one giant plate.
+To understand how blocks operate at a data-structure level, let's take a small detour to the simile of the printing press of Johannes Gutenberg. In letterpress, a finished page was assembled from individual characters, and then a test print was made in a [galley](https://en.wikipedia.org/wiki/Galley_proof) and then locked into a [chase](https://en.wikipedia.org/wiki/Chase_(printing)) to create a fully formed page. Once printed, there was no need to know whether it was set via individual letters, type slugs from a [linotype machine](https://en.wikipedia.org/wiki/Linotype_machine), or even one giant plate.
-This is true for content blocks. They are the way in which the user creates their content, but they no longer matter once the content is finished. That is, until it needs to be edited. Imagine if the printing press was able to print a page _while_ also including in the page the instructions to generate again the set of movable type required to print it. What we are doing with blocks could be compared to printing invisible marks in the margins so that the printer can make adjustments to an already printed page without needing to set the page again from scratch.
+The same is true with content blocks. Blocks are the way in which users create content, but they no longer matter once the content is finished. That is, until it needs to be edited. Imagine if the printing press were able to print a page _while_ also including in that page the instructions to generate the set of movable type required to print it again. What we are doing with blocks could be compared to printing invisible marks in the margins so that the printer can make adjustments to an already printed page without needing to set the page again from scratch.
Content in WordPress is stored as HTML-like text in `post_content`. HTML is a robust document markup format and has been used to describe content as simple as unformatted paragraphs of text and as complex as entire application interfaces. Understanding HTML is not trivial; a significant number of existing documents and tools deal with technically invalid or ambiguous code. This code, even when valid, can be incredibly tricky and complicated to parse – and to understand.
-The main point is to let the machines work at what they are good at, and optimize for the user and the document. The analogy with the printing press can be taken further in that what matters is the printed page, not the arrangement of metal type that originated it. As a matter of fact, the arrangement of type is a pretty inconvenient storage mechanism. The page is both the result _and_ the proper way to store the data. The metal type is just an instrument for publication and editing, but more ephemeral in nature. Exactly as our use of an object tree (e.g. JSON) in the editor. We have the ability to rebuild this structure from the printed page, as if we printed notations in the margins that allows a machine to know which [sorts]() (metal type) to assemble to recreate the page.
+The main point of blocks is to let the machines work at what they are good at and optimize for the user and the document. The analogy with the printing press can be taken further in that what matters is the printed page, not the arrangement of metal type that produced it. As a matter of fact, the arrangement of type is a pretty inconvenient storage mechanism. The page is both the result _and_ a better way to store the data. The metal type is just an instrument for publication and editing (but more ephemeral in nature), just like our use of an object tree (e.g. JSON) in the editor. We have the ability to rebuild this structure from the printed page, as if we had printed notations in the margins to allow a machine to know which [sorts]() (metal type) to assemble to recreate the page.
## Blocks are higher-level than HTML
-Blocks are a helpful tool to describe how to edit content that goes beyond simple text, but they don't carry much meaning _once_ the final page has been generated and is consumed as an HTML document. Even though the end result is HTML in a browser, a "block" connotes more meaning than the HTML it generates. That extra meaning is what enables the rich editing experience, as it allows the application to include tools to help the user craft the content they want. The HTML is augmented with the editing tools. For many blocks, the HTML produced is incidental, and subject to change. Blocks can be powerful and significantly more complex than the HTML they produce.
+Blocks are a helpful tool to describe how to edit content that goes beyond simple text, but they don't carry much meaning _once_ the final page has been generated and is consumed as an HTML document. Even though the end result is HTML in a browser, a "block" connotes more meaning than the HTML it generates. That extra meaning is what enables the rich editing experience, as it allows the application to include tools to help the user craft the content they want. The HTML is augmented with the editing tools. For many blocks, the HTML produced is incidental and subject to change. Blocks can be powerful and significantly more complex than the HTML they produce.
-The problem an editor like Gutenberg faces is that once things have been transformed into HTML, there's no inherent meaning anymore in the HTML markup from which to construct a specific block interface back. That means the HTML content can be ambiguous: the _same_ markup can correspond to entirely _different_ blocks. One consequence of this fact is that it demonstrates how we have lost meaning when we move down to HTML alone. So there needs to be a reliable way to know a block type without having to understand HTML.
+The problem an editor like Gutenberg faces is that once things have been transformed into HTML, there's no inherent meaning in the HTML markup anymore from which to construct a specific block interface back, which means that the HTML content can be ambiguous: the _same_ markup can correspond to entirely _different_ blocks. One consequence of this fact is that it demonstrates how we lose meaning when we move down to HTML alone. So, there needs to be a reliable way to know a block type without having to understand HTML.
-Additionally, how do we even know this came from our editor? Maybe someone snuck it in by hand when trying to quickly jump in and change the page. The structure of the higher-level meaning is implicit and indistinguishable from the same markup when entered manually. When Gutenberg operates on a block, it knows its type and attributes without inspecting the HTML source.
+Additionally, how do we even know this came from our editor? Maybe someone snuck it in by hand when trying to quickly jump in and change the page. When entered manually, the structure of the higher-level meaning is implicit and indistinguishable from the same markup. When Gutenberg operates on a block, it knows the block's type and attributes without inspecting the HTML source.
## The post dichotomy
-A Gutenberg post is the proper block-aware representation of a post, a collection of semantically consistent descriptions of what each block is and what its essential data is. This representation only ever exists in memory. It is the [chase]() in the typesetter's workshop, ever-shifting as sorts are attached and repositioned.
+A Gutenberg post is the proper block-aware representation of a post: a collection of semantically consistent descriptions of what each block is and what its essential data is. This representation only ever exists in memory. It is the [chase]() in the typesetter's workshop, ever-shifting as [sorts]() are attached and repositioned.
-A Gutenberg post is not the artifact it produces, namely the `post_content`. The latter is the printed page, optimized for the reader, but retaining its invisible markings for later editing.
+A Gutenberg post is not the artifact it produces, namely the `post_content`. The latter is the printed page, optimized for the reader but retaining its invisible markings for later editing.
-Later sections of this document will refer to _Gutenberg post_ and to _blocks_. These are to be assumed to not be the `post_content` or the invisible markings.
+Later sections of this document will refer to _Gutenberg post_ and to _blocks_. These are to be assumed not to be the `post_content` or the invisible markings.
## A Tree of Blocks
@@ -101,33 +101,33 @@ The tree of objects describes the list of blocks that compose a post.
## Serialization and the Purpose of HTML Comments
-Gutenberg's data model, however, is something that lives in memory while editing a post. It's not visible to the page viewer when rendered. Like a printed page has no trace of the structure of the letters that originated it in the press.
+Gutenberg's data model, however, is something that lives in memory while editing a post. It's not visible to the page viewer when rendered, just like a printed page has no trace of the structure of the letters that produced it in the press.
-Since the whole WordPress ecosystem has an expectation for receiving HTML when rendering or editing a post, Gutenberg transforms its data model into something that can be saved in `post_content` through serialization. This assures that there's a single source of truth for the content, and that this source remains readable and compatible with all the tools that interact with WordPress content at the present. Were we to store the object tree separately, we would face the risk of `post_content` and the tree getting out of sync and the problem of duplication of data in both places.
+Since the whole WordPress ecosystem has an expectation for receiving HTML when rendering or editing a post, Gutenberg transforms its data model into something that can be saved in `post_content` through serialization. This assures that there's a single source of truth for the content, and that this source remains readable and compatible with all the tools that interact with WordPress content at the present. Were we to store the object tree separately, we would face the risk of `post_content` and the tree getting out of sync and the problem of data duplication in both places.
Thus, the serialization process converts the tree into HTML using HTML comments as explicit block delimiters—which can contain the attributes in non-HTML form. This is the act of printing invisible marks on the printed page that leave a trace of the original structured intention.
-This is one end of the process. The other is how to recreate the internal data tree of the collection of blocks whenever a post is to be edited again. A formal grammar defines how the serialized representation of a Gutenberg post should be loaded just as some basic rules define how to turn the tree into an HTML-like string. Gutenberg posts aren't designed to be edited by hand; they aren't designed to be edited as HTML documents because Gutenberg posts aren't HTML in essence.
+This is one end of the process. The other is how to recreate the internal data tree of the collection of blocks whenever a post is to be edited again. A formal grammar defines how the serialized representation of a Gutenberg post should be loaded, just as some basic rules define how to turn the tree into an HTML-like string. Gutenberg posts aren't designed to be edited by hand; they aren't designed to be edited as HTML documents because Gutenberg posts aren't HTML in essence.
-They just happen, incidentally, to be stored inside of `post_content` in a way in which they require no transformation in order to be viewable by any legacy system. It's true that loading the stored HTML into a browser without the corresponding machinery might degrade the experience, also if it included dynamic blocks of content: dynamic elements may not load, server-generated content may not appear, interactive content may remain static. However, it at least protects against not being able to view Gutenberg posts on themes and installations which are Gutenberg-unaware, and provides the most accessible way to the content. In other words the post remains mostly intact even if the Gutenberg is not supported on the installation.
+They just happen, incidentally, to be stored inside of `post_content` in a way in which they require no transformation in order to be viewable by any legacy system. It's true that loading the stored HTML into a browser without the corresponding machinery might degrade the experience, and if it included dynamic blocks of content, the dynamic elements may not load, server-generated content may not appear, and interactive content may remain static. However, it at least protects against not being able to view Gutenberg posts on themes and installations that are Gutenberg-unaware, and it provides the most accessible way to the content. In other words, the post remains mostly intact even if Gutenberg is not supported on the installation.
## Delimiters and Parsing Expression Grammar
-We chose instead to try and find a way to keep the formality and explicitness and unambiguity into the existing HTML syntax. Within the HTML there are a number of options:
+We chose instead to try to find a way to keep the formality, explicitness, and unambiguity in the existing HTML syntax. Within the HTML there were a number of options.
-Of these options a novel approach was suggested that by storing data in HTML comments we would know that we wouldn't break the rest of the HTML in the document, that browsers should ignore it, and that we could simplify our approach to parsing the document.
+Of these options, a novel approach was suggested: by storing data in HTML comments, we would know that we wouldn't break the rest of the HTML in the document, that browsers should ignore it, and that we could simplify our approach to parsing the document.
-Unique to comments is that they cannot legitimately exist in ambiguous places, such as inside of HTML attributes like ``. Comments are also quite permissive. Whereas HTML attributes are complicated to parse properly, comments are quite easily described by a leading ``. This simplicity and permissiveness means that the parser can be implemented in several ways without needing to understand HTML properly and we have the liberty to use more convenient syntax inside of the comment—we only need to escape double-hyphen sequences. We take advantage of this in how we store block attributes: JSON literals inside the comment.
+Unique to HTML comments is the fact that they cannot legitimately exist in ambiguous places, such as inside of HTML attributes like ``. Comments are also quite permissive. Whereas HTML attributes are complicated to parse properly, comments are quite easily described by a leading ``. This simplicity and permissiveness means that the parser can be implemented in several ways without needing to understand HTML properly, and we have the liberty to use more convenient syntax inside of the comment—we only need to escape double-hyphen sequences. We take advantage of this in how we store block attributes: as JSON literals inside the comment.
-After running this through the parser we're left with a simple object we can manipulate idiomatically and we don't have to worry about escaping or unescaping the data. It's handled for us through the serialization process. Because the comments are so different from other HTML tags and because we can perform a first-pass to extract the top-level blocks, we don't actually depend on having fully valid HTML!
+After running this through the parser, we're left with a simple object we can manipulate idiomatically, and we don't have to worry about escaping or unescaping the data. It's handled for us through the serialization process. Because the comments are so different from other HTML tags and because we can perform a first-pass to extract the top-level blocks, we don't actually depend on having fully valid HTML!
This has dramatic implications for how simple and performant we can make our parser. These explicit boundaries also protect damage in a single block from bleeding into other blocks or tarnishing the entire document. It also allows the system to identify unrecognized blocks before rendering them.
-_N.B.:_ The defining aspect of blocks are their semantics and the isolation mechanism they provide; in other words, their identity. On the other hand, where their data is stored is a more liberal aspect. Blocks support more than just static local data (via JSON literals inside the HTML comment or within the block's HTML), and more mechanisms (_e.g._, global blocks or otherwise resorting to storage in complementary `WP_Post` objects) are expected. See [attributes](/docs/designers-developers/developers/block-api/block-attributes.md) for details.
+_N.B.:_ The defining aspects of blocks are their semantics and the isolation mechanism they provide: in other words, their identity. On the other hand, where their data is stored is a more liberal aspect. Blocks support more than just static local data (via JSON literals inside the HTML comment or within the block's HTML), and more mechanisms (_e.g._, global blocks or otherwise resorting to storage in complementary `WP_Post` objects) are expected. See [attributes](/docs/designers-developers/developers/block-api/block-attributes.md) for details.
## The Anatomy of a Serialized Block
-When blocks are saved to the content, after the editing session, its attributes—depending on the nature of the block—are serialized to these explicit comment delimiters.
+When blocks are saved to the content after the editing session, its attributes—depending on the nature of the block—are serialized to these explicit comment delimiters.
```html
@@ -135,7 +135,7 @@ When blocks are saved to the content, after the editing session, its attributes
```
-A purely dynamic block that is to be server rendered before display could look like this:
+A purely dynamic block that is to be server-rendered before display could look like this:
```html
diff --git a/docs/manifest-devhub.json b/docs/manifest-devhub.json
index 10b2c9362e8aef..fc1b3c700b373c 100644
--- a/docs/manifest-devhub.json
+++ b/docs/manifest-devhub.json
@@ -179,6 +179,12 @@
"markdown_source": "../docs/designers-developers/developers/themes/theme-support.md",
"parent": "themes"
},
+ {
+ "title": "Block-based Themes (Experimental)",
+ "slug": "block-based-themes",
+ "markdown_source": "../docs/designers-developers/developers/themes/block-based-themes.md",
+ "parent": "themes"
+ },
{
"title": "Backward Compatibility",
"slug": "backward-compatibility",
@@ -317,6 +323,12 @@
"markdown_source": "../docs/contributors/localizing.md",
"parent": "develop"
},
+ {
+ "title": "React Native based mobile Gutenberg",
+ "slug": "native-mobile",
+ "markdown_source": "../docs/contributors/native-mobile.md",
+ "parent": "develop"
+ },
{
"title": "Documentation Contributions",
"slug": "document",
@@ -599,6 +611,12 @@
"markdown_source": "../packages/components/src/button/README.md",
"parent": "components"
},
+ {
+ "title": "Card",
+ "slug": "card",
+ "markdown_source": "../packages/components/src/card/README.md",
+ "parent": "components"
+ },
{
"title": "CheckboxControl",
"slug": "checkbox-control",
@@ -641,6 +659,12 @@
"markdown_source": "../packages/components/src/date-time/README.md",
"parent": "components"
},
+ {
+ "title": "DimensionControl",
+ "slug": "dimension-control",
+ "markdown_source": "../packages/components/src/dimension-control/README.md",
+ "parent": "components"
+ },
{
"title": "Disabled",
"slug": "disabled",
@@ -713,6 +737,12 @@
"markdown_source": "../packages/components/src/form-token-field/README.md",
"parent": "components"
},
+ {
+ "title": "Guide",
+ "slug": "guide",
+ "markdown_source": "../packages/components/src/guide/README.md",
+ "parent": "components"
+ },
{
"title": "NavigateRegions",
"slug": "navigate-regions",
@@ -941,6 +971,12 @@
"markdown_source": "../packages/components/src/text-control/README.md",
"parent": "components"
},
+ {
+ "title": "TextHighlight",
+ "slug": "text-highlight",
+ "markdown_source": "../packages/components/src/text-highlight/README.md",
+ "parent": "components"
+ },
{
"title": "TextareaControl",
"slug": "textarea-control",
@@ -971,6 +1007,12 @@
"markdown_source": "../packages/components/src/tree-select/README.md",
"parent": "components"
},
+ {
+ "title": "VisuallyHidden",
+ "slug": "visually-hidden",
+ "markdown_source": "../packages/components/src/visually-hidden/README.md",
+ "parent": "components"
+ },
{
"title": "Data Module Reference",
"slug": "data",
@@ -1079,6 +1121,12 @@
"markdown_source": "../packages/babel-preset-default/README.md",
"parent": "packages"
},
+ {
+ "title": "@wordpress/base-styles",
+ "slug": "packages-base-styles",
+ "markdown_source": "../packages/base-styles/README.md",
+ "parent": "packages"
+ },
{
"title": "@wordpress/blob",
"slug": "packages-blob",
diff --git a/docs/manifest.json b/docs/manifest.json
index 03f85343b014a3..eed82cf6659fbe 100644
--- a/docs/manifest.json
+++ b/docs/manifest.json
@@ -959,6 +959,12 @@
"markdown_source": "https://raw.githubusercontent.com/WordPress/gutenberg/master/docs/designers-developers/developers/themes/theme-support.md",
"parent": "themes"
},
+ {
+ "title": "Block-based Themes (Experimental)",
+ "slug": "block-based-themes",
+ "markdown_source": "../docs/designers-developers/developers/themes/block-based-themes.md",
+ "parent": "themes"
+ },
{
"title": "Backward Compatibility",
"slug": "backward-compatibility",
diff --git a/docs/readme.md b/docs/readme.md
index 0f7817cd0b5a3d..7ff2c262da8e12 100644
--- a/docs/readme.md
+++ b/docs/readme.md
@@ -6,6 +6,6 @@ The Gutenberg project is transforming the way content is created on WordPress. A
Using a system of Blocks to compose and format content, the new block-based editor is designed to create rich, flexible layouts for websites and digital products. Content is created in the unit of blocks instead of freeform text with inserted media, embeds and Shortcodes (there's a Shortcode block though).
-Blocks treat Paragraphs, Headings, Media, Embeds all as components that strung together make up the content stored in the WordPress database, replacing the traditional concept of freeform text with embedded media and shortcodes. The new editor is designed with progressive enhancement, meaning it is back-compatible with all legacy content, offers a process to try to convert and split a Classic block into block equivalents using client-side parsing and finally the blocks offer enhanced editing and format controls.
+Blocks treat Paragraphs, Headings, Media, and Embeds all as components that, when strung together, make up the content stored in the WordPress database, replacing the traditional concept of freeform text with embedded media and shortcodes. The new editor is designed with progressive enhancement, meaning that it is back-compatible with all legacy content, and it also offers a process to try to convert and split a Classic block into equivalent blocks using client-side parsing. Finally, the blocks offer enhanced editing and format controls.
The Editor offers rich new value to users with visual, drag-and-drop creation tools and powerful developer enhancements with modern vendor packages, reusable components, rich APIs and hooks to modify and extend the editor through Custom Blocks, Custom Block Styles and Plugins.
diff --git a/docs/toc.json b/docs/toc.json
index 8f42aa7d2fa717..21cce65ff5ab8f 100644
--- a/docs/toc.json
+++ b/docs/toc.json
@@ -31,7 +31,8 @@
{ "docs/designers-developers/developers/accessibility.md": [] },
{ "docs/designers-developers/developers/feature-flags.md": [] },
{ "docs/designers-developers/developers/themes/README.md": [
- { "docs/designers-developers/developers/themes/theme-support.md": [] }
+ { "docs/designers-developers/developers/themes/theme-support.md": [] },
+ { "docs/designers-developers/developers/themes/block-based-themes.md": [] }
] },
{ "docs/designers-developers/developers/backward-compatibility/README.md": [
{ "docs/designers-developers/developers/backward-compatibility/deprecations.md": [] },
@@ -59,7 +60,8 @@
{ "docs/contributors/scripts.md": [] },
{ "docs/contributors/managing-packages.md": [] },
{ "docs/contributors/release.md": [] },
- { "docs/contributors/localizing.md": [] }
+ { "docs/contributors/localizing.md": [] },
+ { "docs/contributors/native-mobile.md": [] }
] },
{ "docs/contributors/document.md": [
{ "docs/contributors/copy-guide.md": [] }
diff --git a/docs/tool/update-data.js b/docs/tool/update-data.js
index 59a45ac4d599b7..46263e788dfe0e 100644
--- a/docs/tool/update-data.js
+++ b/docs/tool/update-data.js
@@ -33,7 +33,7 @@ modules.forEach( ( entry ) => {
// until docgen provides a way to update many tokens at once, we need to make sure
// the output file is updated before starting the second pass for the next token.
const { status, stderr } = spawnSync(
- join( __dirname, '..', '..', 'node_modules', '.bin', 'docgen' ),
+ join( __dirname, '..', '..', 'node_modules', '.bin', 'docgen' ).replace( / /g, '\\ ' ),
[
target,
`--output docs/designers-developers/developers/data/data-${ namespace.replace( '/', '-' ) }.md`,
diff --git a/gutenberg.php b/gutenberg.php
index 53333e55831917..0b001147c178e0 100644
--- a/gutenberg.php
+++ b/gutenberg.php
@@ -3,7 +3,7 @@
* Plugin Name: Gutenberg
* Plugin URI: https://github.com/WordPress/gutenberg
* Description: Printing since 1440. This is the development plugin for the new block editor in core.
- * Version: 6.6.0
+ * Version: 7.1.0
* Author: Gutenberg Team
* Text Domain: gutenberg
*
@@ -87,7 +87,7 @@ function gutenberg_menu() {
function gutenberg_wordpress_version_notice() {
echo '
';
/* translators: %s: Minimum required version */
- printf( __( 'Gutenberg requires WordPress %s or later to function properly. Please upgrade WordPress before activating Gutenberg.', 'gutenberg' ), '5.0.0' );
+ printf( __( 'Gutenberg requires WordPress %s or later to function properly. Please upgrade WordPress before activating Gutenberg.', 'gutenberg' ), '5.2.0' );
echo '
';
deactivate_plugins( array( 'gutenberg/gutenberg.php' ) );
@@ -122,7 +122,7 @@ function gutenberg_pre_init() {
// Strip '-src' from the version string. Messes up version_compare().
$version = str_replace( '-src', '', $wp_version );
- if ( version_compare( $version, '5.0.0', '<' ) ) {
+ if ( version_compare( $version, '5.2.0', '<' ) ) {
add_action( 'admin_notices', 'gutenberg_wordpress_version_notice' );
return;
}
diff --git a/lerna.json b/lerna.json
index 26b583780ca582..eea747b337ce78 100644
--- a/lerna.json
+++ b/lerna.json
@@ -7,7 +7,7 @@
"ignoreChanges": [
"**/benchmark/*.js",
"**/CHANGELOG.md",
- "**/test/**",
+ "**/{__mocks__,__tests__,test}/**",
"**/{storybook,stories}/**"
],
"packages": [
diff --git a/lib/block-directory.php b/lib/block-directory.php
new file mode 100644
index 00000000000000..723db66de2b3c5
--- /dev/null
+++ b/lib/block-directory.php
@@ -0,0 +1,21 @@
+ 'core/latest-comments',
'latest-posts.php' => 'core/latest-posts',
'legacy-widget.php' => 'core/legacy-widget',
- 'navigation-menu.php' => 'core/navigation-menu',
+ 'navigation.php' => 'core/navigation',
'rss.php' => 'core/rss',
'shortcode.php' => 'core/shortcode',
'search.php' => 'core/search',
'social-link.php' => gutenberg_get_registered_social_link_blocks(),
'tag-cloud.php' => 'core/tag-cloud',
+ 'site-title.php' => 'core/site-title',
+ 'template-part.php' => 'core/template-part',
+ 'post-title.php' => 'core/post-title',
+ 'post-content.php' => 'core/post-content',
);
$registry = WP_Block_Type_Registry::get_instance();
diff --git a/lib/class-experimental-wp-widget-blocks-manager.php b/lib/class-experimental-wp-widget-blocks-manager.php
index c3b609db6738c7..c915807bd769bb 100644
--- a/lib/class-experimental-wp-widget-blocks-manager.php
+++ b/lib/class-experimental-wp-widget-blocks-manager.php
@@ -121,16 +121,26 @@ public static function get_sidebar_as_blocks( $sidebar_id ) {
$wp_registered_sidebars = self::get_wp_registered_sidebars();
foreach ( $sidebars_items[ $sidebar_id ] as $item ) {
- $widget_class = self::get_widget_class( $item );
- $blocks[] = array(
+ $widget_class = self::get_widget_class( $item );
+ list( $object, $number ) = self::get_widget_info( $item );
+ $new_block = array(
'blockName' => 'core/legacy-widget',
'attrs' => array(
- 'class' => $widget_class,
- 'identifier' => $item,
- 'instance' => self::get_sidebar_widget_instance( $wp_registered_sidebars[ $sidebar_id ], $item ),
+ 'id' => $item,
+ 'instance' => self::get_sidebar_widget_instance( $wp_registered_sidebars[ $sidebar_id ], $item ),
),
'innerHTML' => '',
);
+ if ( null !== $widget_class ) {
+ $new_block['attrs']['widgetClass'] = $widget_class;
+ }
+ if ( isset( $object->id_base ) ) {
+ $new_block['attrs']['idBase'] = $object->id_base;
+ }
+ if ( is_int( $number ) ) {
+ $new_block['attrs']['number'] = $number;
+ }
+ $blocks[] = $new_block;
}
return $blocks;
}
diff --git a/lib/class-wp-rest-block-directory-controller.php b/lib/class-wp-rest-block-directory-controller.php
index f8c1d1d71bea55..7360fa9d2533ff 100644
--- a/lib/class-wp-rest-block-directory-controller.php
+++ b/lib/class-wp-rest-block-directory-controller.php
@@ -300,7 +300,11 @@ private static function parse_block_metadata( $plugin ) {
$block->assets[] = 'https://plugins.svn.wordpress.org/' . $plugin['slug'] . $asset;
}
- $block->humanized_updated = human_time_diff( strtotime( $plugin['last_updated'] ), current_time( 'timestamp' ) ) . __( ' ago', 'gutenberg' );
+ $block->humanized_updated = sprintf(
+ /* translators: %s: Human-readable time difference. */
+ __( '%s ago', 'gutenberg' ),
+ human_time_diff( strtotime( $plugin['last_updated'] ), current_time( 'timestamp' ) )
+ );
return $block;
}
diff --git a/lib/class-wp-rest-widget-updater-controller.php b/lib/class-wp-rest-widget-forms.php
similarity index 69%
rename from lib/class-wp-rest-widget-updater-controller.php
rename to lib/class-wp-rest-widget-forms.php
index 22c8a59bec4e24..c2f7299b557e06 100644
--- a/lib/class-wp-rest-widget-updater-controller.php
+++ b/lib/class-wp-rest-widget-forms.php
@@ -1,7 +1,7 @@
namespace = 'wp/v2';
- $this->rest_base = 'widgets';
+ $this->namespace = '__experimental';
+ $this->rest_base = 'widget-forms';
}
/**
@@ -35,12 +35,24 @@ public function register_routes() {
register_rest_route(
$this->namespace,
// Regex representing a PHP class extracted from http://php.net/manual/en/language.oop5.basic.php.
- '/' . $this->rest_base . '/(?P[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)/',
+ '/' . $this->rest_base . '/(?P[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)/',
array(
'args' => array(
- 'identifier' => array(
- 'description' => __( 'Class name of the widget.', 'gutenberg' ),
- 'type' => 'string',
+ 'widget_class' => array(
+ 'description' => __( 'Class name of the widget.', 'gutenberg' ),
+ 'type' => 'string',
+ 'required' => true,
+ 'validate_callback' => array( $this, 'is_valid_widget' ),
+ ),
+ 'instance' => array(
+ 'description' => __( 'Current widget instance', 'gutenberg' ),
+ 'type' => 'object',
+ 'default' => array(),
+ ),
+ 'instance_changes' => array(
+ 'description' => __( 'Array of instance changes', 'gutenberg' ),
+ 'type' => 'object',
+ 'default' => array(),
),
),
array(
@@ -76,51 +88,46 @@ public function compute_new_widget_permissions_check() {
}
/**
- * Returns the new widget instance and the form that represents it.
+ * Checks if the widget being referenced is valid.
*
* @since 5.2.0
+ * @param string $widget_class Name of the class the widget references.
+ *
+ * @return boolean| True if the widget being referenced exists and false otherwise.
+ */
+ private function is_valid_widget( $widget_class ) {
+ global $wp_widget_factory;
+ if ( ! $widget_class ) {
+ return false;
+ }
+ return isset( $wp_widget_factory->widgets[ $widget_class ] ) &&
+ ( $wp_widget_factory->widgets[ $widget_class ] instanceof WP_Widget );
+ }
+
+ /**
+ * Returns the new widget instance and the form that represents it.
+ *
+ * @since 5.7.0
* @access public
*
* @param WP_REST_Request $request Full details about the request.
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function compute_new_widget( $request ) {
- $widget = $request->get_param( 'identifier' );
+ $widget_class = $request->get_param( 'widget_class' );
+ $instance = $request->get_param( 'instance' );
+ $instance_changes = $request->get_param( 'instance_changes' );
global $wp_widget_factory;
+ $widget_obj = $wp_widget_factory->widgets[ $widget_class ];
- if (
- null === $widget ||
- ! isset( $wp_widget_factory->widgets[ $widget ] ) ||
- ! ( $wp_widget_factory->widgets[ $widget ] instanceof WP_Widget )
- ) {
- return new WP_Error(
- 'widget_invalid',
- __( 'Invalid widget.', 'gutenberg' ),
- array(
- 'status' => 404,
- )
- );
- }
-
- $widget_obj = $wp_widget_factory->widgets[ $widget ];
-
- $instance = $request->get_param( 'instance' );
- if ( null === $instance ) {
- $instance = array();
- }
- $id_to_use = $request->get_param( 'id_to_use' );
- if ( null === $id_to_use ) {
- $id_to_use = -1;
- }
-
- $widget_obj->_set( $id_to_use );
+ $widget_obj->_set( -1 );
ob_start();
- $instance_changes = $request->get_param( 'instance_changes' );
- if ( null !== $instance_changes ) {
+ if ( ! empty( $instance_changes ) ) {
$old_instance = $instance;
$instance = $widget_obj->update( $instance_changes, $old_instance );
+
/**
* Filters a widget's settings before saving.
*
@@ -164,17 +171,12 @@ public function compute_new_widget( $request ) {
*/
do_action_ref_array( 'in_widget_form', array( &$widget_obj, &$return, $instance ) );
}
-
- $id_base = $widget_obj->id_base;
- $id = $widget_obj->id;
- $form = ob_get_clean();
+ $form = ob_get_clean();
return rest_ensure_response(
array(
'instance' => $instance,
'form' => $form,
- 'id_base' => $id_base,
- 'id' => $id,
)
);
}
diff --git a/lib/client-assets.php b/lib/client-assets.php
index 9715935313b18d..44b2766647d075 100644
--- a/lib/client-assets.php
+++ b/lib/client-assets.php
@@ -42,6 +42,7 @@ function gutenberg_url( $path ) {
*
* @since 4.1.0
*
+ * @param WP_Scripts $scripts WP_Scripts instance (passed by reference).
* @param string $handle Name of the script. Should be unique.
* @param string $src Full URL of the script, or path of the script relative to the WordPress root directory.
* @param array $deps Optional. An array of registered script handles this script depends on. Default empty array.
@@ -52,10 +53,8 @@ function gutenberg_url( $path ) {
* @param bool $in_footer Optional. Whether to enqueue the script before
>
+
+
+
+
+
+
instead of in the
.
* Default 'false'.
*/
-function gutenberg_override_script( $handle, $src, $deps = array(), $ver = false, $in_footer = false ) {
- global $wp_scripts;
-
- $script = $wp_scripts->query( $handle, 'registered' );
+function gutenberg_override_script( &$scripts, $handle, $src, $deps = array(), $ver = false, $in_footer = false ) {
+ $script = $scripts->query( $handle, 'registered' );
if ( $script ) {
/*
* In many ways, this is a reimplementation of `wp_register_script` but
@@ -67,6 +66,7 @@ function gutenberg_override_script( $handle, $src, $deps = array(), $ver = false
$script->src = $src;
$script->deps = $deps;
$script->ver = $ver;
+ $script->args = $in_footer;
/*
* The script's `group` designation is an indication of whether it is
@@ -81,7 +81,7 @@ function gutenberg_override_script( $handle, $src, $deps = array(), $ver = false
$script->add_data( 'group', 1 );
}
} else {
- wp_register_script( $handle, $src, $deps, $ver, $in_footer );
+ $scripts->add( $handle, $src, $deps, $ver, $in_footer );
}
/*
@@ -93,7 +93,7 @@ function gutenberg_override_script( $handle, $src, $deps = array(), $ver = false
* See: https://core.trac.wordpress.org/ticket/46089
*/
if ( 'wp-i18n' !== $handle && 'wp-polyfill' !== $handle ) {
- wp_set_script_translations( $handle, 'default' );
+ $scripts->set_translations( $handle, 'default' );
}
}
@@ -145,10 +145,6 @@ function gutenberg_override_translation_file( $file, $handle ) {
$path_parts['basename']
);
- if ( ! is_readable( $plugin_translation_file ) ) {
- return $file;
- }
-
return $plugin_translation_file;
}
add_filter( 'load_script_translation_file', 'gutenberg_override_translation_file', 10, 2 );
@@ -159,6 +155,7 @@ function gutenberg_override_translation_file( $file, $handle ) {
*
* @since 4.1.0
*
+ * @param WP_Styles $styles WP_Styles instance (passed by reference).
* @param string $handle Name of the stylesheet. Should be unique.
* @param string $src Full URL of the stylesheet, or path of the stylesheet relative to the WordPress root directory.
* @param array $deps Optional. An array of registered stylesheet handles this stylesheet depends on. Default empty array.
@@ -170,18 +167,69 @@ function gutenberg_override_translation_file( $file, $handle ) {
* Default 'all'. Accepts media types like 'all', 'print' and 'screen', or media queries like
* '(orientation: portrait)' and '(max-width: 640px)'.
*/
-function gutenberg_override_style( $handle, $src, $deps = array(), $ver = false, $media = 'all' ) {
- wp_deregister_style( $handle );
- wp_register_style( $handle, $src, $deps, $ver, $media );
+function gutenberg_override_style( &$styles, $handle, $src, $deps = array(), $ver = false, $media = 'all' ) {
+ $style = $styles->query( $handle, 'registered' );
+ if ( $style ) {
+ $styles->remove( $handle );
+ }
+ $styles->add( $handle, $src, $deps, $ver, $media );
}
+/**
+ * Registers vendor JavaScript files to be used as dependencies of the editor
+ * and plugins.
+ *
+ * This function is called from a script during the plugin build process, so it
+ * should not call any WordPress PHP functions.
+ *
+ * @since 0.1.0
+ *
+ * @param WP_Scripts $scripts WP_Scripts instance (passed by reference).
+ */
+function gutenberg_register_vendor_scripts( &$scripts ) {
+ $suffix = SCRIPT_DEBUG ? '' : '.min';
+
+ // Vendor Scripts.
+ $react_suffix = ( SCRIPT_DEBUG ? '.development' : '.production' ) . $suffix;
+
+ // TODO: Overrides for react, react-dom and lodash are necessary
+ // until WordPress 5.3 is released.
+ gutenberg_register_vendor_script(
+ $scripts,
+ 'react',
+ 'https://unpkg.com/react@16.9.0/umd/react' . $react_suffix . '.js',
+ array( 'wp-polyfill' ),
+ '16.9.0',
+ true
+ );
+ gutenberg_register_vendor_script(
+ $scripts,
+ 'react-dom',
+ 'https://unpkg.com/react-dom@16.9.0/umd/react-dom' . $react_suffix . '.js',
+ array( 'react' ),
+ '16.9.0',
+ true
+ );
+ gutenberg_register_vendor_script(
+ $scripts,
+ 'lodash',
+ 'https://unpkg.com/lodash@4.17.15/lodash' . $suffix . '.js',
+ array(),
+ '4.17.15',
+ true
+ );
+}
+add_action( 'wp_default_scripts', 'gutenberg_register_vendor_scripts' );
+
/**
* Registers all the WordPress packages scripts that are in the standardized
* `build/` location.
*
* @since 4.5.0
+ *
+ * @param WP_Scripts $scripts WP_Scripts instance (passed by reference).
*/
-function gutenberg_register_packages_scripts() {
+function gutenberg_register_packages_scripts( &$scripts ) {
foreach ( glob( gutenberg_dir_path() . 'build/*/index.js' ) as $path ) {
// Prefix `wp-` to package directory to get script handle.
// For example, `…/build/a11y/index.js` becomes `wp-a11y`.
@@ -190,7 +238,7 @@ function gutenberg_register_packages_scripts() {
// Replace `.js` extension with `.asset.php` to find the generated dependencies file.
$asset_file = substr( $path, 0, -3 ) . '.asset.php';
$asset = file_exists( $asset_file )
- ? require_once( $asset_file )
+ ? require( $asset_file )
: null;
$dependencies = isset( $asset['dependencies'] ) ? $asset['dependencies'] : array();
$version = isset( $asset['version'] ) ? $asset['version'] : filemtime( $path );
@@ -210,6 +258,7 @@ function gutenberg_register_packages_scripts() {
$gutenberg_path = substr( $path, strlen( gutenberg_dir_path() ) );
gutenberg_override_script(
+ $scripts,
$handle,
gutenberg_url( $gutenberg_path ),
$dependencies,
@@ -218,116 +267,74 @@ function gutenberg_register_packages_scripts() {
);
}
}
+add_action( 'wp_default_scripts', 'gutenberg_register_packages_scripts' );
/**
- * Registers common scripts and styles to be used as dependencies of the editor
- * and plugins.
+ * Registers all the WordPress packages styles that are in the standardized
+ * `build/` location.
*
- * @since 0.1.0
- */
-function gutenberg_register_scripts_and_styles() {
- global $wp_scripts;
-
- gutenberg_register_vendor_scripts();
- gutenberg_register_packages_scripts();
-
- // Add nonce middleware which accounts for the absence of the heartbeat
- // listener. This relies on API Fetch implementation running middlewares in
- // order of last added, and that the original nonce middleware would defer
- // to an X-WP-Nonce header already being present. This inline script should
- // be removed once the following Core ticket is resolved in assigning the
- // nonce received from heartbeat to the created middleware.
- //
- // See: https://core.trac.wordpress.org/ticket/46107 .
- // See: https://github.com/WordPress/gutenberg/pull/13451 .
- if ( isset( $wp_scripts->registered['wp-api-fetch'] ) ) {
- $wp_scripts->registered['wp-api-fetch']->deps[] = 'wp-hooks';
- }
- wp_add_inline_script(
- 'wp-api-fetch',
- sprintf(
- 'wp.apiFetch.nonceMiddleware = wp.apiFetch.createNonceMiddleware( "%s" );' .
- 'wp.apiFetch.use( wp.apiFetch.nonceMiddleware );' .
- 'wp.apiFetch.nonceEndpoint = "%s";',
- ( wp_installing() && ! is_multisite() ) ? '' : wp_create_nonce( 'wp_rest' ),
- admin_url( 'admin-ajax.php?action=gutenberg_rest_nonce' )
- ),
- 'after'
- );
-
- // TEMPORARY: Core does not (yet) provide persistence migration from the
- // introduction of the block editor and still calls the data plugins.
- // We unset the existing inline scripts first.
- $wp_scripts->registered['wp-data']->extra['after'] = array();
- wp_add_inline_script(
- 'wp-data',
- implode(
- "\n",
- array(
- '( function() {',
- ' var userId = ' . get_current_user_ID() . ';',
- ' var storageKey = "WP_DATA_USER_" + userId;',
- ' wp.data',
- ' .use( wp.data.plugins.persistence, { storageKey: storageKey } );',
- ' wp.data.plugins.persistence.__unstableMigrate( { storageKey: storageKey } );',
- '} )();',
- )
- )
- );
+ * @since 6.7.0
+ * @param WP_Styles $styles WP_Styles instance (passed by reference).
+ */
+function gutenberg_register_packages_styles( &$styles ) {
// Editor Styles.
- // This empty stylesheet is defined to ensure backward compatibility.
- gutenberg_override_style( 'wp-blocks', false );
-
gutenberg_override_style(
+ $styles,
'wp-block-editor',
gutenberg_url( 'build/block-editor/style.css' ),
array( 'wp-components', 'wp-editor-font' ),
filemtime( gutenberg_dir_path() . 'build/editor/style.css' )
);
- wp_style_add_data( 'wp-block-editor', 'rtl', 'replace' );
+ $styles->add_data( 'wp-block-editor', 'rtl', 'replace' );
gutenberg_override_style(
+ $styles,
'wp-editor',
gutenberg_url( 'build/editor/style.css' ),
- array( 'wp-components', 'wp-block-editor', 'wp-nux', 'wp-block-directory' ),
+ array( 'wp-components', 'wp-block-editor', 'wp-nux' ),
filemtime( gutenberg_dir_path() . 'build/editor/style.css' )
);
- wp_style_add_data( 'wp-editor', 'rtl', 'replace' );
+ $styles->add_data( 'wp-editor', 'rtl', 'replace' );
gutenberg_override_style(
+ $styles,
'wp-edit-post',
gutenberg_url( 'build/edit-post/style.css' ),
array( 'wp-components', 'wp-block-editor', 'wp-editor', 'wp-edit-blocks', 'wp-block-library', 'wp-nux' ),
filemtime( gutenberg_dir_path() . 'build/edit-post/style.css' )
);
- wp_style_add_data( 'wp-edit-post', 'rtl', 'replace' );
+ $styles->add_data( 'wp-edit-post', 'rtl', 'replace' );
gutenberg_override_style(
+ $styles,
'wp-components',
gutenberg_url( 'build/components/style.css' ),
array(),
filemtime( gutenberg_dir_path() . 'build/components/style.css' )
);
- wp_style_add_data( 'wp-components', 'rtl', 'replace' );
+ $styles->add_data( 'wp-components', 'rtl', 'replace' );
gutenberg_override_style(
+ $styles,
'wp-block-library',
gutenberg_url( 'build/block-library/style.css' ),
array(),
filemtime( gutenberg_dir_path() . 'build/block-library/style.css' )
);
- wp_style_add_data( 'wp-block-library', 'rtl', 'replace' );
+ $styles->add_data( 'wp-block-library', 'rtl', 'replace' );
gutenberg_override_style(
+ $styles,
'wp-format-library',
gutenberg_url( 'build/format-library/style.css' ),
array( 'wp-block-editor', 'wp-components' ),
filemtime( gutenberg_dir_path() . 'build/format-library/style.css' )
);
- wp_style_add_data( 'wp-format-library', 'rtl', 'replace' );
+ $styles->add_data( 'wp-format-library', 'rtl', 'replace' );
gutenberg_override_style(
+ $styles,
'wp-edit-blocks',
gutenberg_url( 'build/block-library/editor.css' ),
array(
@@ -339,92 +346,107 @@ function gutenberg_register_scripts_and_styles() {
),
filemtime( gutenberg_dir_path() . 'build/block-library/editor.css' )
);
- wp_style_add_data( 'wp-edit-blocks', 'rtl', 'replace' );
+ $styles->add_data( 'wp-edit-blocks', 'rtl', 'replace' );
gutenberg_override_style(
+ $styles,
'wp-nux',
gutenberg_url( 'build/nux/style.css' ),
array( 'wp-components' ),
filemtime( gutenberg_dir_path() . 'build/nux/style.css' )
);
- wp_style_add_data( 'wp-nux', 'rtl', 'replace' );
+ $styles->add_data( 'wp-nux', 'rtl', 'replace' );
gutenberg_override_style(
+ $styles,
'wp-block-library-theme',
gutenberg_url( 'build/block-library/theme.css' ),
array(),
filemtime( gutenberg_dir_path() . 'build/block-library/theme.css' )
);
- wp_style_add_data( 'wp-block-library-theme', 'rtl', 'replace' );
+ $styles->add_data( 'wp-block-library-theme', 'rtl', 'replace' );
gutenberg_override_style(
+ $styles,
'wp-list-reusable-blocks',
gutenberg_url( 'build/list-reusable-blocks/style.css' ),
array( 'wp-components' ),
filemtime( gutenberg_dir_path() . 'build/list-reusable-blocks/style.css' )
);
- wp_style_add_data( 'wp-list-reusable-block', 'rtl', 'replace' );
+ $styles->add_data( 'wp-list-reusable-block', 'rtl', 'replace' );
gutenberg_override_style(
+ $styles,
'wp-edit-widgets',
gutenberg_url( 'build/edit-widgets/style.css' ),
array( 'wp-components', 'wp-block-editor', 'wp-edit-blocks' ),
filemtime( gutenberg_dir_path() . 'build/edit-widgets/style.css' )
);
- wp_style_add_data( 'wp-edit-widgets', 'rtl', 'replace' );
+ $styles->add_data( 'wp-edit-widgets', 'rtl', 'replace' );
gutenberg_override_style(
+ $styles,
'wp-block-directory',
gutenberg_url( 'build/block-directory/style.css' ),
- array( 'wp-components' ),
+ array( 'wp-block-editor', 'wp-components' ),
filemtime( gutenberg_dir_path() . 'build/block-directory/style.css' )
);
- wp_style_add_data( 'wp-block-directory', 'rtl', 'replace' );
-
- if ( defined( 'GUTENBERG_LIVE_RELOAD' ) && GUTENBERG_LIVE_RELOAD ) {
- $live_reload_url = ( GUTENBERG_LIVE_RELOAD === true ) ? 'http://localhost:35729/livereload.js' : GUTENBERG_LIVE_RELOAD;
-
- wp_enqueue_script(
- 'gutenberg-live-reload',
- $live_reload_url
- );
- }
+ $styles->add_data( 'wp-block-directory', 'rtl', 'replace' );
}
-add_action( 'wp_enqueue_scripts', 'gutenberg_register_scripts_and_styles', 5 );
-add_action( 'admin_enqueue_scripts', 'gutenberg_register_scripts_and_styles', 5 );
+add_action( 'wp_default_styles', 'gutenberg_register_packages_styles' );
/**
- * Registers vendor JavaScript files to be used as dependencies of the editor
+ * Registers common scripts and styles to be used as dependencies of the editor
* and plugins.
*
- * This function is called from a script during the plugin build process, so it
- * should not call any WordPress PHP functions.
- *
* @since 0.1.0
*/
-function gutenberg_register_vendor_scripts() {
- $suffix = SCRIPT_DEBUG ? '' : '.min';
-
- // Vendor Scripts.
- $react_suffix = ( SCRIPT_DEBUG ? '.development' : '.production' ) . $suffix;
+function gutenberg_enqueue_block_editor_assets() {
+ global $wp_scripts;
- // TODO: Overrides for react, react-dom and lodash are necessary
- // until WordPress 5.3 is released.
- gutenberg_register_vendor_script(
- 'react',
- 'https://unpkg.com/react@16.9.0/umd/react' . $react_suffix . '.js',
- array( 'wp-polyfill' )
- );
- gutenberg_register_vendor_script(
- 'react-dom',
- 'https://unpkg.com/react-dom@16.9.0/umd/react-dom' . $react_suffix . '.js',
- array( 'react' )
+ wp_add_inline_script(
+ 'wp-api-fetch',
+ sprintf(
+ 'wp.apiFetch.nonceMiddleware = wp.apiFetch.createNonceMiddleware( "%s" );' .
+ 'wp.apiFetch.use( wp.apiFetch.nonceMiddleware );' .
+ 'wp.apiFetch.nonceEndpoint = "%s";' .
+ 'wp.apiFetch.use( wp.apiFetch.mediaUploadMiddleware );',
+ ( wp_installing() && ! is_multisite() ) ? '' : wp_create_nonce( 'wp_rest' ),
+ admin_url( 'admin-ajax.php?action=gutenberg_rest_nonce' )
+ ),
+ 'after'
);
- gutenberg_register_vendor_script(
- 'lodash',
- 'https://unpkg.com/lodash@4.17.15/lodash' . $suffix . '.js'
+
+ // TEMPORARY: Core does not (yet) provide persistence migration from the
+ // introduction of the block editor and still calls the data plugins.
+ // We unset the existing inline scripts first.
+ $wp_scripts->registered['wp-data']->extra['after'] = array();
+ wp_add_inline_script(
+ 'wp-data',
+ implode(
+ "\n",
+ array(
+ '( function() {',
+ ' var userId = ' . get_current_user_ID() . ';',
+ ' var storageKey = "WP_DATA_USER_" + userId;',
+ ' wp.data',
+ ' .use( wp.data.plugins.persistence, { storageKey: storageKey } );',
+ ' wp.data.plugins.persistence.__unstableMigrate( { storageKey: storageKey } );',
+ '} )();',
+ )
+ )
);
+
+ if ( defined( 'GUTENBERG_LIVE_RELOAD' ) && GUTENBERG_LIVE_RELOAD ) {
+ $live_reload_url = ( GUTENBERG_LIVE_RELOAD === true ) ? 'http://localhost:35729/livereload.js' : GUTENBERG_LIVE_RELOAD;
+
+ wp_enqueue_script(
+ 'gutenberg-live-reload',
+ $live_reload_url
+ );
+ }
}
+add_action( 'enqueue_block_editor_assets', 'gutenberg_enqueue_block_editor_assets' );
/**
* Retrieves a unique and reasonably short and human-friendly filename for a
@@ -462,14 +484,21 @@ function gutenberg_vendor_script_filename( $handle, $src ) {
* possible, or downloading it if the cached version is unavailable or
* outdated.
*
- * @param string $handle Name of the script.
- * @param string $src Full URL of the external script.
- * @param array $deps Optional. An array of registered script handles this
- * script depends on.
+ * @param WP_Scripts $scripts WP_Scripts instance (passed by reference).
+ * @param string $handle Name of the script.
+ * @param string $src Full URL of the external script.
+ * @param array $deps Optional. An array of registered script handles this
+ * script depends on.
+ * @param string|bool|null $ver Optional. String specifying script version number, if it has one, which is added to the URL
+ * as a query string for cache busting purposes. If version is set to false, a version
+ * number is automatically added equal to current installed WordPress version.
+ * If set to null, no version is added.
+ * @param bool $in_footer Optional. Whether to enqueue the script before instead of in the
.
+ * Default 'false'.
*
* @since 0.1.0
*/
-function gutenberg_register_vendor_script( $handle, $src, $deps = array() ) {
+function gutenberg_register_vendor_script( &$scripts, $handle, $src, $deps = array(), $ver = null, $in_footer = false ) {
if ( defined( 'GUTENBERG_LOAD_VENDOR_SCRIPTS' ) && ! GUTENBERG_LOAD_VENDOR_SCRIPTS ) {
return;
}
@@ -499,7 +528,7 @@ function gutenberg_register_vendor_script( $handle, $src, $deps = array() ) {
if ( ! $f ) {
// Failed to open the file for writing, probably due to server
// permissions. Enqueue the script directly from the URL instead.
- gutenberg_override_script( $handle, $src, $deps, null );
+ gutenberg_override_script( $scripts, $handle, $src, $deps, $ver, $in_footer );
return;
}
fclose( $f );
@@ -512,16 +541,18 @@ function gutenberg_register_vendor_script( $handle, $src, $deps = array() ) {
// The request failed. If the file is already cached, continue to
// use this file. If not, then unlink the 0 byte file, and enqueue
// the script directly from the URL.
- gutenberg_override_script( $handle, $src, $deps, null );
+ gutenberg_override_script( $scripts, $handle, $src, $deps, $ver, $in_footer );
unlink( $full_path );
return;
}
}
gutenberg_override_script(
+ $scripts,
$handle,
gutenberg_url( 'vendor/' . $filename ),
$deps,
- null
+ $ver,
+ $in_footer
);
}
diff --git a/lib/compat.php b/lib/compat.php
index 2c432f36a76b98..c5db9b4d481708 100644
--- a/lib/compat.php
+++ b/lib/compat.php
@@ -74,3 +74,21 @@ function gutenberg_provide_render_callback_with_block_object( $pre_render, $bloc
return apply_filters( 'render_block', $block_content, $block );
}
add_filter( 'pre_render_block', 'gutenberg_provide_render_callback_with_block_object', 10, 2 );
+
+/**
+ * Sets the current post for usage in template blocks.
+ *
+ * @return WP_Post|null The post if any, or null otherwise.
+ */
+function gutenberg_get_post_from_context() {
+ // TODO: Without this temporary fix, an infinite loop can occur where
+ // posts with post content blocks render themselves recursively.
+ if ( is_admin() || defined( 'REST_REQUEST' ) ) {
+ return null;
+ }
+ if ( ! in_the_loop() ) {
+ rewind_posts();
+ the_post();
+ }
+ return get_post();
+}
diff --git a/lib/customizer.php b/lib/customizer.php
index 771ced523f5c98..1f27db00ee3085 100644
--- a/lib/customizer.php
+++ b/lib/customizer.php
@@ -55,7 +55,7 @@ function gutenberg_customize_register( $wp_customize ) {
'sanitize_callback' => 'gutenberg_customize_sanitize',
)
);
- if ( get_option( 'gutenberg-experiments' ) && array_key_exists( 'gutenberg-widget-experiments', get_option( 'gutenberg-experiments' ) ) ) {
+ if ( gutenberg_is_experiment_enabled( 'gutenberg-widget-experiments' ) ) {
$wp_customize->add_section(
'gutenberg_widget_blocks',
array( 'title' => __( 'Widget Blocks (Experimental)', 'gutenberg' ) )
diff --git a/lib/demo-block-templates/index.html b/lib/demo-block-templates/index.html
new file mode 100644
index 00000000000000..a6a93733a70799
--- /dev/null
+++ b/lib/demo-block-templates/index.html
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
With full-site editing you can modify all visual aspects of the site using the block editor.