{ __( 'Embedding…' ) }
-{ __( 'Embedding…' ) }
+++-setAttributes( { + value: fromRichTextValue( nextValue ), + } ) + } + /* translators: the text of the quotation */ + placeholder={ __( 'Write quote…' ) } + wrapperClassName="core-blocks-pullquote__content" + /> + { ( citation || isSelected ) && ( setAttributes( { - value: fromRichTextValue( nextValue ), + ( nextCitation ) => setAttributes( { + citation: nextCitation, } ) } - /* translators: the text of the quotation */ - placeholder={ __( 'Write quote…' ) } - wrapperClassName="core-blocks-pullquote__content" /> - { ( citation || isSelected ) && ( - setAttributes( { - citation: nextCitation, - } ) - } - /> - ) } -
+@@ -130,6 +111,10 @@ export const settings = { source: 'children', selector: 'footer', }, + align: { + type: 'string', + default: 'none', + }, }, save( { attributes } ) { diff --git a/core-blocks/table/index.js b/core-blocks/table/index.js index c7cc16ee8fab22..41c33d78699d82 100644 --- a/core-blocks/table/index.js +++ b/core-blocks/table/index.js @@ -10,8 +10,6 @@ import classnames from 'classnames'; import { Fragment } from '@wordpress/element'; import { getPhrasingContentSchema } from '@wordpress/blocks'; import { - BlockControls, - BlockAlignmentToolbar, RichText, InspectorControls, } from '@wordpress/editor'; @@ -78,15 +76,16 @@ export const settings = { , ], }, - align: { - type: 'string', - }, hasFixedLayout: { type: 'boolean', default: false, }, }, + supports: { + align: true, + }, + transforms: { from: [ { @@ -97,16 +96,8 @@ export const settings = { ], }, - getEditWrapperProps( attributes ) { - const { align } = attributes; - if ( 'left' === align || 'right' === align || 'wide' === align || 'full' === align ) { - return { 'data-align': align }; - } - }, - edit( { attributes, setAttributes, isSelected, className } ) { const { content, hasFixedLayout } = attributes; - const updateAlignment = ( nextAlign ) => setAttributes( { align: nextAlign } ); const toggleFixedLayout = () => { setAttributes( { hasFixedLayout: ! hasFixedLayout } ); }; @@ -120,12 +111,6 @@ export const settings = { return ({ citation && citation.length > 0 && } - - - - +
diff --git a/core-blocks/test/fixtures/core__gallery.json b/core-blocks/test/fixtures/core__gallery.json index 0cf9d11b8cfe59..acc930adeb1cc3 100644 --- a/core-blocks/test/fixtures/core__gallery.json +++ b/core-blocks/test/fixtures/core__gallery.json @@ -4,7 +4,6 @@ "name": "core/gallery", "isValid": true, "attributes": { - "align": "none", "images": [ { "url": "https://cldup.com/uuUqE_dXzy.jpg", @@ -21,6 +20,6 @@ "linkTo": "none" }, "innerBlocks": [], - "originalContent": "
\n\t
" + "originalContent": "- \n\t\t
\n\t\n\t\t\t \n\t\n\t\t
- \n\t\t
\n\n\t\t\t \n\t\n\t\t
\n\t
" } ] diff --git a/core-blocks/test/fixtures/core__gallery.parsed.json b/core-blocks/test/fixtures/core__gallery.parsed.json index e187acdd51e60d..aebcb2c1f36fdf 100644 --- a/core-blocks/test/fixtures/core__gallery.parsed.json +++ b/core-blocks/test/fixtures/core__gallery.parsed.json @@ -3,7 +3,7 @@ "blockName": "core/gallery", "attrs": null, "innerBlocks": [], - "innerHTML": "\n- \n\t\t
\n\t\n\t\t\t \n\t\n\t\t
- \n\t\t
\n\n\t\t\t \n\t\n\t\t
\n\t
\n" + "innerHTML": "\n- \n\t\t
\n\t\n\t\t\t \n\t\n\t\t
- \n\t\t
\n\n\t\t\t \n\t\n\t\t
\n\t
\n" }, { "attrs": {}, diff --git a/core-blocks/test/fixtures/core__gallery.serialized.html b/core-blocks/test/fixtures/core__gallery.serialized.html index 370c3f5571d48e..5bf6ce819f9767 100644 --- a/core-blocks/test/fixtures/core__gallery.serialized.html +++ b/core-blocks/test/fixtures/core__gallery.serialized.html @@ -1,3 +1,3 @@ -- \n\t\t
\n\t\n\t\t\t \n\t\n\t\t
- \n\t\t
\n\n\t\t\t \n\t\n\t\t
+
diff --git a/core-blocks/test/fixtures/core__gallery__columns.html b/core-blocks/test/fixtures/core__gallery__columns.html index 24d87615b81a69..74aae8ee72553f 100644 --- a/core-blocks/test/fixtures/core__gallery__columns.html +++ b/core-blocks/test/fixtures/core__gallery__columns.html @@ -1,5 +1,5 @@ -
+
diff --git a/core-blocks/test/fixtures/core__gallery__columns.json b/core-blocks/test/fixtures/core__gallery__columns.json index 74dd537db3809a..09ae7dd3b138c8 100644 --- a/core-blocks/test/fixtures/core__gallery__columns.json +++ b/core-blocks/test/fixtures/core__gallery__columns.json @@ -4,7 +4,6 @@ "name": "core/gallery", "isValid": true, "attributes": { - "align": "none", "images": [ { "url": "https://cldup.com/uuUqE_dXzy.jpg", @@ -22,6 +21,6 @@ "linkTo": "none" }, "innerBlocks": [], - "originalContent": "
\n\t
" + "originalContent": "- \n\t\t
\n\t\n\t\t\t \n\t\n\t\t
- \n\t\t
\n\n\t\t\t \n\t\n\t\t
\n\t
" } ] diff --git a/core-blocks/test/fixtures/core__gallery__columns.parsed.json b/core-blocks/test/fixtures/core__gallery__columns.parsed.json index 8fd100edece694..6f30dbe25d480f 100644 --- a/core-blocks/test/fixtures/core__gallery__columns.parsed.json +++ b/core-blocks/test/fixtures/core__gallery__columns.parsed.json @@ -5,7 +5,7 @@ "columns": "1" }, "innerBlocks": [], - "innerHTML": "\n- \n\t\t
\n\t\n\t\t\t \n\t\n\t\t
- \n\t\t
\n\n\t\t\t \n\t\n\t\t
\n\t
\n" + "innerHTML": "\n- \n\t\t
\n\t\n\t\t\t \n\t\n\t\t
- \n\t\t
\n\n\t\t\t \n\t\n\t\t
\n\t
\n" }, { "attrs": {}, diff --git a/core-blocks/test/fixtures/core__gallery__columns.serialized.html b/core-blocks/test/fixtures/core__gallery__columns.serialized.html index 1d5d8ca7da72e9..183e484ec42b6d 100644 --- a/core-blocks/test/fixtures/core__gallery__columns.serialized.html +++ b/core-blocks/test/fixtures/core__gallery__columns.serialized.html @@ -1,3 +1,3 @@ -- \n\t\t
\n\t\n\t\t\t \n\t\n\t\t
- \n\t\t
\n\n\t\t\t \n\t\n\t\t
+
diff --git a/core-blocks/test/fixtures/core__latest-comments.json b/core-blocks/test/fixtures/core__latest-comments.json index 155ef9f06de071..a4558772762f20 100644 --- a/core-blocks/test/fixtures/core__latest-comments.json +++ b/core-blocks/test/fixtures/core__latest-comments.json @@ -3,7 +3,12 @@ "clientId": "_clientId_0", "name": "core/latest-comments", "isValid": true, - "attributes": {}, + "attributes": { + "commentsToShow": 5, + "displayAvatar": true, + "displayDate": true, + "displayExcerpt": true + }, "innerBlocks": [], "originalContent": "" } diff --git a/core-blocks/test/fixtures/core__pullquote.html b/core-blocks/test/fixtures/core__pullquote.html index 06d1ea9ab61144..8c13cedfe000dc 100644 --- a/core-blocks/test/fixtures/core__pullquote.html +++ b/core-blocks/test/fixtures/core__pullquote.html @@ -1,5 +1,5 @@ -
+diff --git a/core-blocks/test/fixtures/core__pullquote.json b/core-blocks/test/fixtures/core__pullquote.json index 754ba9d007cc10..11d576614228cd 100644 --- a/core-blocks/test/fixtures/core__pullquote.json +++ b/core-blocks/test/fixtures/core__pullquote.json @@ -18,10 +18,9 @@ ], "citation": [ "...with a caption" - ], - "align": "none" + ] }, "innerBlocks": [], - "originalContent": "Testing pullquote block...
...with a caption\n" + "originalContent": "Testing pullquote block...
...with a caption\n\n" } ] diff --git a/core-blocks/test/fixtures/core__pullquote.parsed.json b/core-blocks/test/fixtures/core__pullquote.parsed.json index 4a96da0d5574ba..c8d7f7c3c2dd61 100644 --- a/core-blocks/test/fixtures/core__pullquote.parsed.json +++ b/core-blocks/test/fixtures/core__pullquote.parsed.json @@ -3,7 +3,7 @@ "blockName": "core/pullquote", "attrs": null, "innerBlocks": [], - "innerHTML": "\nTesting pullquote block...
...with a caption\n\n\n" + "innerHTML": "\nTesting pullquote block...
...with a caption\n\n\n" }, { "attrs": {}, diff --git a/core-blocks/test/fixtures/core__pullquote.serialized.html b/core-blocks/test/fixtures/core__pullquote.serialized.html index ae5fb6ac94f3a1..00f47cf0d5e399 100644 --- a/core-blocks/test/fixtures/core__pullquote.serialized.html +++ b/core-blocks/test/fixtures/core__pullquote.serialized.html @@ -1,3 +1,3 @@ -Testing pullquote block...
...with a caption\n+Testing pullquote block...
...with a captiondiff --git a/core-blocks/test/fixtures/core__pullquote__multi-paragraph.html b/core-blocks/test/fixtures/core__pullquote__multi-paragraph.html index 113d829d01329c..252b029f1f888d 100644 --- a/core-blocks/test/fixtures/core__pullquote__multi-paragraph.html +++ b/core-blocks/test/fixtures/core__pullquote__multi-paragraph.html @@ -1,5 +1,5 @@ -Testing pullquote block...
...with a caption+Paragraph one
Paragraph two
by whomever diff --git a/core-blocks/test/fixtures/core__pullquote__multi-paragraph.json b/core-blocks/test/fixtures/core__pullquote__multi-paragraph.json index efd2a82c1d116e..266568fa51bc00 100644 --- a/core-blocks/test/fixtures/core__pullquote__multi-paragraph.json +++ b/core-blocks/test/fixtures/core__pullquote__multi-paragraph.json @@ -36,10 +36,9 @@ ], "citation": [ "by whomever" - ], - "align": "none" + ] }, "innerBlocks": [], - "originalContent": "\n" + "originalContent": "Paragraph one
\nParagraph two
\n by whomever\n\n" } ] diff --git a/core-blocks/test/fixtures/core__pullquote__multi-paragraph.parsed.json b/core-blocks/test/fixtures/core__pullquote__multi-paragraph.parsed.json index 4821344abd80aa..2a816764b3ae4d 100644 --- a/core-blocks/test/fixtures/core__pullquote__multi-paragraph.parsed.json +++ b/core-blocks/test/fixtures/core__pullquote__multi-paragraph.parsed.json @@ -3,7 +3,7 @@ "blockName": "core/pullquote", "attrs": null, "innerBlocks": [], - "innerHTML": "\nParagraph one
\nParagraph two
\n by whomever\n\n\n" + "innerHTML": "\nParagraph one
\nParagraph two
\n by whomever\n\n\n" }, { "attrs": {}, diff --git a/core-blocks/test/fixtures/core__pullquote__multi-paragraph.serialized.html b/core-blocks/test/fixtures/core__pullquote__multi-paragraph.serialized.html index 8445a7c9b1bf2e..635df56edcf4f7 100644 --- a/core-blocks/test/fixtures/core__pullquote__multi-paragraph.serialized.html +++ b/core-blocks/test/fixtures/core__pullquote__multi-paragraph.serialized.html @@ -1,3 +1,3 @@ -Paragraph one
\nParagraph two
\n by whomever\n+Paragraph one
Paragraph two
by whomeverdiff --git a/core-blocks/test/server-registered.json b/core-blocks/test/server-registered.json index 4adfc2b53bcd19..b75f0231026d74 100644 --- a/core-blocks/test/server-registered.json +++ b/core-blocks/test/server-registered.json @@ -1 +1 @@ -{"core\/block":{"attributes":{"ref":{"type":"number"}}},"core\/archives":{"attributes":{"showPostCounts":{"type":"boolean","default":false},"displayAsDropdown":{"type":"boolean","default":false},"align":{"type":"string","default":"none"}}},"core\/latest-posts":{"attributes":{"categories":{"type":"string"},"className":{"type":"string"},"postsToShow":{"type":"number","default":5},"displayPostDate":{"type":"boolean","default":false},"postLayout":{"type":"string","default":"list"},"columns":{"type":"number","default":3},"align":{"type":"string","default":"center"},"order":{"type":"string","default":"desc"},"orderBy":{"type":"string","default":"date"}}}} \ No newline at end of file +{"core\/block":{"attributes":{"ref":{"type":"number"}}},"core\/latest-comments":{"attributes":{"className":{"type":"string"},"commentsToShow":{"type":"number","default":5,"minimum":1,"maximum":100},"displayAvatar":{"type":"boolean","default":true},"displayDate":{"type":"boolean","default":true},"displayExcerpt":{"type":"boolean","default":true},"align":{"type":"string","enum":["center","left","right","wide","full",""]}}},"core\/archives":{"attributes":{"showPostCounts":{"type":"boolean","default":false},"displayAsDropdown":{"type":"boolean","default":false},"align":{"type":"string","default":"none"}}},"core\/latest-posts":{"attributes":{"categories":{"type":"string"},"className":{"type":"string"},"postsToShow":{"type":"number","default":5},"displayPostDate":{"type":"boolean","default":false},"postLayout":{"type":"string","default":"list"},"columns":{"type":"number","default":3},"align":{"type":"string","default":"center"},"order":{"type":"string","default":"desc"},"orderBy":{"type":"string","default":"date"}}}} \ No newline at end of file diff --git a/core-blocks/video/edit.js b/core-blocks/video/edit.js index 13653482e90b7b..19dd60c226fa31 100644 --- a/core-blocks/video/edit.js +++ b/core-blocks/video/edit.js @@ -15,7 +15,9 @@ import { InspectorControls, MediaPlaceholder, RichText, + editorMediaUpload, } from '@wordpress/editor'; +import { getBlobByURL } from '@wordpress/blob'; /** * Internal dependencies @@ -35,6 +37,27 @@ class VideoEdit extends Component { this.onSelectURL = this.onSelectURL.bind( this ); } + componentDidMount() { + const { attributes, noticeOperations, setAttributes } = this.props; + const { id, src = '' } = attributes; + if ( ! id && src.indexOf( 'blob:' ) === 0 ) { + const file = getBlobByURL( src ); + if ( file ) { + editorMediaUpload( { + filesList: [ file ], + onFileChange: ( [ { url } ] ) => { + setAttributes( { src: url } ); + }, + onError: ( message ) => { + this.setState( { editing: true } ); + noticeOperations.createErrorNotice( message ); + }, + allowedType: 'video', + } ); + } + } + } + toggleAttribute( attribute ) { return ( newValue ) => { this.props.setAttributes( { [ attribute ]: newValue } ); diff --git a/core-blocks/video/index.js b/core-blocks/video/index.js index b307fd1b26dcd4..c1a9536814f064 100644 --- a/core-blocks/video/index.js +++ b/core-blocks/video/index.js @@ -7,6 +7,8 @@ */ import { __ } from '@wordpress/i18n'; import { RichText } from '@wordpress/editor'; +import { createBlock } from '@wordpress/blocks'; +import { createBlobURL } from '@wordpress/blob'; /** * Internal dependencies @@ -68,6 +70,27 @@ export const settings = { }, }, + transforms: { + from: [ + { + type: 'files', + isMatch( files ) { + return files.length === 1 && files[ 0 ].type.indexOf( 'video/' ) === 0; + }, + transform( files ) { + const file = files[ 0 ]; + // We don't need to upload the media directly here + // It's already done as part of the `componentDidMount` + // in the video block + const block = createBlock( 'core/video', { + src: createBlobURL( file ), + } ); + return block; + }, + }, + ], + }, + supports: { align: true, }, diff --git a/docs/extensibility/extending-blocks.md b/docs/extensibility/extending-blocks.md index 59a8e6418edc91..0c774397b7804f 100644 --- a/docs/extensibility/extending-blocks.md +++ b/docs/extensibility/extending-blocks.md @@ -10,6 +10,30 @@ To modify the behavior of existing blocks, Gutenberg exposes the following Filte Used to filter the block settings. It receives the block settings and the name of the block the registered block as arguments. +_Example:_ + +Ensure that List blocks are saved with the canonical generated class name (`wp-block-list`): + +```js +function addListBlockClassName( settings, name ) { + if ( name !== 'core/list' ) { + return settings; + } + + return Object.assign( {}, settings, { + supports: Object.assign( {}, settings.supports, { + className: true + } ), + } ); +} + +wp.hooks.addFilter( + 'blocks.registerBlockType', + 'my-plugin/class-names/list-block', + addListBlockClassName +); +``` + #### `blocks.getSaveElement` A filter that applies to the result of a block's `save` function. This filter is used to replace or extend the element, for example using `wp.element.cloneElement` to modify the element's props or replace its children, or returning an entirely new element. diff --git a/docs/reference/deprecated.md b/docs/reference/deprecated.md index 699cf8ad1ac224..4be6209416cada 100644 --- a/docs/reference/deprecated.md +++ b/docs/reference/deprecated.md @@ -1,5 +1,12 @@ Gutenberg's deprecation policy is intended to support backwards-compatibility for two minor releases, when possible. The current deprecations are listed below and are grouped by _the version at which they will be removed completely_. If your plugin depends on these behaviors, you must update to the recommended alternative before the noted version. +## 3.6.0 + + - `wp.editor.editorMediaUpload` has been removed. Please use `wp.editor.mediaUpload` instead. + - `wp.utils.getMimeTypesArray` has been removed. + - `wp.utils.mediaUpload` has been removed. Please use `wp.editor.mediaUpload` instead. + - `wp.utils.preloadImage` has been removed. + ## 3.5.0 - `wp.components.ifCondition` has been removed. Please use `wp.compose.ifCondition` instead. diff --git a/edit-post/components/header/style.scss b/edit-post/components/header/style.scss index a99539ea6bf2c2..db312fee2fcf35 100644 --- a/edit-post/components/header/style.scss +++ b/edit-post/components/header/style.scss @@ -31,7 +31,7 @@ display: none; @include break-small { - display: inline-block; + display: inline-flex; } } } diff --git a/editor/components/color-palette/control.js b/editor/components/color-palette/control.js new file mode 100644 index 00000000000000..5863a5f9e605f4 --- /dev/null +++ b/editor/components/color-palette/control.js @@ -0,0 +1,48 @@ +/** + * WordPress dependencies + */ +import { BaseControl, ColorIndicator } from '@wordpress/components'; +import { Fragment } from '@wordpress/element'; +import { sprintf, __ } from '@wordpress/i18n'; + +/** + * Internal dependencies + */ +import './control.scss'; +import ColorPalette from './'; +import withColorContext from './with-color-context'; +import { getColorName } from '../colors'; + +// translators: first %s: The type of color (e.g. background color), second %s: the color name or value (e.g. red or #ff0000) +const colorIndicatorAriaLabel = __( '(current %s: %s)' ); + +const ColorPaletteControl = withColorContext( ( { label, value, onChange, colors } ) => { + const colorName = getColorName( colors, value ); + const ariaLabel = sprintf( colorIndicatorAriaLabel, label.toLowerCase(), colorName || value ); + + const labelElement = ( +Paragraph one
Paragraph two
by whomever+ { label } + { value && ( + + ); + + return ( ++ ) } + + + ); +} ); + +export default ColorPaletteControl; diff --git a/editor/components/color-palette/control.scss b/editor/components/color-palette/control.scss new file mode 100644 index 00000000000000..48ef166e475164 --- /dev/null +++ b/editor/components/color-palette/control.scss @@ -0,0 +1,4 @@ +.editor-color-palette-control__color-palette { + margin-top: .6rem; + margin-bottom: 1.4rem; +} diff --git a/editor/components/index.js b/editor/components/index.js index a469e1b712568f..d7c7eeb5c35495 100644 --- a/editor/components/index.js +++ b/editor/components/index.js @@ -15,6 +15,7 @@ export { default as InnerBlocks } from './inner-blocks'; export { default as InspectorAdvancedControls } from './inspector-advanced-controls'; export { default as InspectorControls } from './inspector-controls'; export { default as PanelColor } from './panel-color'; +export { default as PanelColorSettings } from './panel-color-settings'; export { default as PlainText } from './plain-text'; export { default as RichText } from './rich-text'; export { default as RichTextProvider } from './rich-text/provider'; diff --git a/editor/components/media-placeholder/index.js b/editor/components/media-placeholder/index.js index 0fb751644af70d..30ecc9c50e2639 100644 --- a/editor/components/media-placeholder/index.js +++ b/editor/components/media-placeholder/index.js @@ -22,7 +22,7 @@ import deprecated from '@wordpress/deprecated'; */ import './style.scss'; import MediaUpload from '../media-upload'; -import editorMediaUpload from '../../utils/editor-media-upload'; +import { mediaUpload } from '../../utils/'; class MediaPlaceholder extends Component { constructor() { @@ -84,7 +84,7 @@ class MediaPlaceholder extends Component { onFilesUpload( files ) { const { onSelect, type, multiple, onError } = this.props; const setMedia = multiple ? onSelect : ( [ media ] ) => onSelect( media ); - editorMediaUpload( { + mediaUpload( { allowedType: type, filesList: files, onFileChange: setMedia, diff --git a/editor/components/panel-color-settings/index.js b/editor/components/panel-color-settings/index.js new file mode 100644 index 00000000000000..2cc1fd50a41e63 --- /dev/null +++ b/editor/components/panel-color-settings/index.js @@ -0,0 +1,74 @@ +/** + * External dependencies + */ +import { omit } from 'lodash'; + +/** + * WordPress dependencies + */ +import { PanelBody, ColorIndicator } from '@wordpress/components'; +import { ifCondition, compose } from '@wordpress/compose'; +import { sprintf, __ } from '@wordpress/i18n'; + +/** + * Internal dependencies + */ +import './style.scss'; +import ColorPaletteControl from '../color-palette/control'; +import withColorContext from '../color-palette/with-color-context'; +import { getColorName } from '../colors'; + +// translators: first %s: The type of color (e.g. background color), second %s: the color name or value (e.g. red or #ff0000) +const colorIndicatorAriaLabel = __( '(%s: %s)' ); + +const renderColorIndicators = ( colorSettings, colors ) => { + return colorSettings.map( ( { value, label }, index ) => { + if ( ! value ) { + return null; + } + + const colorName = getColorName( colors, value ); + const ariaLabel = sprintf( colorIndicatorAriaLabel, label.toLowerCase(), colorName || value ); + + return ( ++ + ); + } ); +}; + +// colorSettings is passed as an array of props so that it can be used for +// mapping both ColorIndicator and ColorPaletteControl components. Passing +// an array of components/nodes here wouldn't be feasible. +export function PanelColorSettings( { title, colorSettings, colors, children, ...props } ) { + const className = 'editor-panel-color-settings'; + + const titleElement = ( + + { title } + { renderColorIndicators( colorSettings, colors ) } + + ); + + return ( + + { colorSettings.map( ( settings, index ) => ( + + ); +} + +export default compose( [ + withColorContext, + ifCondition( ( { hasColorsToChoose } ) => hasColorsToChoose ), +] )( PanelColorSettings ); diff --git a/editor/components/panel-color-settings/style.scss b/editor/components/panel-color-settings/style.scss new file mode 100644 index 00000000000000..933c9063f79a56 --- /dev/null +++ b/editor/components/panel-color-settings/style.scss @@ -0,0 +1,13 @@ +.editor-panel-color-settings { + .component-color-indicator { + vertical-align: text-bottom; + } + + &__panel-title .component-color-indicator { + display: inline-block; + } + + &.is-opened &__panel-title .component-color-indicator { + display: none; + } +} diff --git a/editor/components/panel-color-settings/test/__snapshots__/index.js.snap b/editor/components/panel-color-settings/test/__snapshots__/index.js.snap new file mode 100644 index 00000000000000..06183b8c884add --- /dev/null +++ b/editor/components/panel-color-settings/test/__snapshots__/index.js.snap @@ -0,0 +1,35 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`PanelColorSettings matches the snapshot 1`] = ` ++ ) ) } + + { children } + + Test Title + + +