<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[52069] trunk: Add Site Editor and PHP changes from Gutenberg 10.1 - 11.9</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { white-space: pre-line; overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/52069">52069</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/52069","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>noisysocks</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2021-11-09 02:15:23 +0000 (Tue, 09 Nov 2021)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Add Site Editor and PHP changes from Gutenberg 10.1 - 11.9

- First pass at adding the site editor from the Gutenberg plugin to
  wp-admin/site-editor.php.
- Adds miscellaneous PHP changes from Gutenberg 10.1 - 11.9.

Follows <a href="https://core.trac.wordpress.org/changeset/52042">[52042]</a>.
See <a href="https://core.trac.wordpress.org/ticket/54337">#54337</a>.
Props youknowriad, aristath, hellofromtonya, gziolo.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkpackagelockjson">trunk/package-lock.json</a></li>
<li><a href="#trunkpackagejson">trunk/package.json</a></li>
<li><a href="#trunksrcwpadminmenuphp">trunk/src/wp-admin/menu.php</a></li>
<li><a href="#trunksrcwpincludesassetsscriptloaderpackagesphp">trunk/src/wp-includes/assets/script-loader-packages.php</a></li>
<li><a href="#trunksrcwpincludesblockpatternsquerymediumpostsphp">trunk/src/wp-includes/block-patterns/query-medium-posts.php</a></li>
<li><a href="#trunksrcwpincludesblockpatternsquerysmallpostsphp">trunk/src/wp-includes/block-patterns/query-small-posts.php</a></li>
<li><a href="#trunksrcwpincludesblockpatternsquerystandardpostsphp">trunk/src/wp-includes/block-patterns/query-standard-posts.php</a></li>
<li><a href="#trunksrcwpincludesblocksupportsborderphp">trunk/src/wp-includes/block-supports/border.php</a></li>
<li><a href="#trunksrcwpincludesblocksupportscolorsphp">trunk/src/wp-includes/block-supports/colors.php</a></li>
<li><a href="#trunksrcwpincludesblocksupportsduotonephp">trunk/src/wp-includes/block-supports/duotone.php</a></li>
<li><a href="#trunksrcwpincludesblocksupportselementsphp">trunk/src/wp-includes/block-supports/elements.php</a></li>
<li><a href="#trunksrcwpincludesblocksupportslayoutphp">trunk/src/wp-includes/block-supports/layout.php</a></li>
<li><a href="#trunksrcwpincludesblocksupportsspacingphp">trunk/src/wp-includes/block-supports/spacing.php</a></li>
<li><a href="#trunksrcwpincludesblocksupportstypographyphp">trunk/src/wp-includes/block-supports/typography.php</a></li>
<li><a href="#trunksrcwpincludesblocksindexphp">trunk/src/wp-includes/blocks/index.php</a></li>
<li><a href="#trunksrcwpincludesblocksphp">trunk/src/wp-includes/blocks.php</a></li>
<li><a href="#trunksrcwpincludesdefaultfiltersphp">trunk/src/wp-includes/default-filters.php</a></li>
<li><a href="#trunksrcwpincludesksesphp">trunk/src/wp-includes/kses.php</a></li>
<li><a href="#trunksrcwpincludespostphp">trunk/src/wp-includes/post.php</a></li>
<li><a href="#trunksrcwpincludesrestapiendpointsclasswprestuserscontrollerphp">trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php</a></li>
<li><a href="#trunksrcwpincludesrestapiendpointsclasswprestwidgettypescontrollerphp">trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php</a></li>
<li><a href="#trunksrcwpincludesscriptloaderphp">trunk/src/wp-includes/script-loader.php</a></li>
<li><a href="#trunksrcwpincludestemplatecanvasphp">trunk/src/wp-includes/template-canvas.php</a></li>
<li><a href="#trunksrcwpincludesthemephp">trunk/src/wp-includes/theme.php</a></li>
<li><a href="#trunksrcwpsettingsphp">trunk/src/wp-settings.php</a></li>
<li><a href="#trunktestsphpunitincludesfunctionsphp">trunk/tests/phpunit/includes/functions.php</a></li>
<li><a href="#trunktestsphpunittestsblocktemplateutilsphp">trunk/tests/phpunit/tests/block-template-utils.php</a></li>
<li><a href="#trunktestsphpunittestsrestapirestschemasetupphp">trunk/tests/phpunit/tests/rest-api/rest-schema-setup.php</a></li>
<li><a href="#trunktestsphpunittestsrestapirestuserscontrollerphp">trunk/tests/phpunit/tests/rest-api/rest-users-controller.php</a></li>
<li><a href="#trunktestsqunitfixtureswpapigeneratedjs">trunk/tests/qunit/fixtures/wp-api-generated.js</a></li>
<li><a href="#trunktoolswebpackblocksjs">trunk/tools/webpack/blocks.js</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunksrcwpadminsiteeditorphp">trunk/src/wp-admin/site-editor.php</a></li>
<li><a href="#trunksrcwpincludesblocksupportsdimensionsphp">trunk/src/wp-includes/block-supports/dimensions.php</a></li>
<li>trunk/src/wp-includes/blocks/navigation/</li>
<li><a href="#trunksrcwpincludesblocksnavigationblockjson">trunk/src/wp-includes/blocks/navigation/block.json</a></li>
<li><a href="#trunksrcwpincludesblocksnavigationviewassetphp">trunk/src/wp-includes/blocks/navigation/view.asset.php</a></li>
<li><a href="#trunksrcwpincludesblocksnavigationviewminassetphp">trunk/src/wp-includes/blocks/navigation/view.min.asset.php</a></li>
<li>trunk/src/wp-includes/blocks/navigation-area/</li>
<li><a href="#trunksrcwpincludesblocksnavigationareablockjson">trunk/src/wp-includes/blocks/navigation-area/block.json</a></li>
<li><a href="#trunksrcwpincludesblocksnavigationareaphp">trunk/src/wp-includes/blocks/navigation-area.php</a></li>
<li>trunk/src/wp-includes/blocks/navigation-link/</li>
<li><a href="#trunksrcwpincludesblocksnavigationlinkblockjson">trunk/src/wp-includes/blocks/navigation-link/block.json</a></li>
<li><a href="#trunksrcwpincludesblocksnavigationlinkphp">trunk/src/wp-includes/blocks/navigation-link.php</a></li>
<li>trunk/src/wp-includes/blocks/navigation-submenu/</li>
<li><a href="#trunksrcwpincludesblocksnavigationsubmenublockjson">trunk/src/wp-includes/blocks/navigation-submenu/block.json</a></li>
<li><a href="#trunksrcwpincludesblocksnavigationsubmenuphp">trunk/src/wp-includes/blocks/navigation-submenu.php</a></li>
<li><a href="#trunksrcwpincludesblocksnavigationphp">trunk/src/wp-includes/blocks/navigation.php</a></li>
<li>trunk/src/wp-includes/blocks/pattern/</li>
<li><a href="#trunksrcwpincludesblockspatternblockjson">trunk/src/wp-includes/blocks/pattern/block.json</a></li>
<li><a href="#trunksrcwpincludesblockspatternphp">trunk/src/wp-includes/blocks/pattern.php</a></li>
<li>trunk/src/wp-includes/blocks/post-author/</li>
<li><a href="#trunksrcwpincludesblockspostauthorblockjson">trunk/src/wp-includes/blocks/post-author/block.json</a></li>
<li><a href="#trunksrcwpincludesblockspostauthorphp">trunk/src/wp-includes/blocks/post-author.php</a></li>
<li>trunk/src/wp-includes/blocks/post-comments/</li>
<li><a href="#trunksrcwpincludesblockspostcommentsblockjson">trunk/src/wp-includes/blocks/post-comments/block.json</a></li>
<li><a href="#trunksrcwpincludesblockspostcommentsphp">trunk/src/wp-includes/blocks/post-comments.php</a></li>
<li>trunk/src/wp-includes/blocks/post-navigation-link/</li>
<li><a href="#trunksrcwpincludesblockspostnavigationlinkblockjson">trunk/src/wp-includes/blocks/post-navigation-link/block.json</a></li>
<li><a href="#trunksrcwpincludesblockspostnavigationlinkphp">trunk/src/wp-includes/blocks/post-navigation-link.php</a></li>
<li>trunk/src/wp-includes/blocks/term-description/</li>
<li><a href="#trunksrcwpincludesblockstermdescriptionblockjson">trunk/src/wp-includes/blocks/term-description/block.json</a></li>
<li><a href="#trunksrcwpincludesblockstermdescriptionphp">trunk/src/wp-includes/blocks/term-description.php</a></li>
<li>trunk/src/wp-includes/blocks/widget-group/</li>
<li><a href="#trunksrcwpincludesblockswidgetgroupblockjson">trunk/src/wp-includes/blocks/widget-group/block.json</a></li>
<li><a href="#trunksrcwpincludesblockswidgetgroupphp">trunk/src/wp-includes/blocks/widget-group.php</a></li>
<li>trunk/tests/phpunit/tests/block-supports/</li>
<li><a href="#trunktestsphpunittestsblocksupportscolorsphp">trunk/tests/phpunit/tests/block-supports/colors.php</a></li>
<li><a href="#trunktestsphpunittestsblocksupportselementsphp">trunk/tests/phpunit/tests/block-supports/elements.php</a></li>
<li><a href="#trunktestsphpunittestsblocksupportsspacingphp">trunk/tests/phpunit/tests/block-supports/spacing.php</a></li>
<li><a href="#trunktestsphpunittestsblocksupportstypographyphp">trunk/tests/phpunit/tests/block-supports/typography.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkpackagelockjson"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/package-lock.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/package-lock.json   2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/package-lock.json     2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3888,6 +3888,44 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                "@wordpress/edit-site": {
+                       "version": "3.0.5",
+                       "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-3.0.5.tgz",
+                       "integrity": "sha512-FYr6xwZcDaPxiOBsmzHnbaSdGeGD55I2j2flJPtLM4v7jzrIFVOBBaFtGUAUTtl0oagOlVNkQidL+/mVAcbIeQ==",
+                       "requires": {
+                               "@babel/runtime": "^7.13.10",
+                               "@wordpress/a11y": "^3.2.3",
+                               "@wordpress/api-fetch": "^5.2.5",
+                               "@wordpress/block-editor": "^8.0.0",
+                               "@wordpress/block-library": "^6.0.3",
+                               "@wordpress/blocks": "^11.1.3",
+                               "@wordpress/components": "^19.0.1",
+                               "@wordpress/compose": "^5.0.5",
+                               "@wordpress/core-data": "^4.0.5",
+                               "@wordpress/data": "^6.1.3",
+                               "@wordpress/data-controls": "^2.2.6",
+                               "@wordpress/editor": "^12.0.2",
+                               "@wordpress/element": "^4.0.3",
+                               "@wordpress/hooks": "^3.2.1",
+                               "@wordpress/html-entities": "^3.2.2",
+                               "@wordpress/i18n": "^4.2.3",
+                               "@wordpress/icons": "^6.1.0",
+                               "@wordpress/interface": "^4.1.3",
+                               "@wordpress/keyboard-shortcuts": "^3.0.5",
+                               "@wordpress/keycodes": "^3.2.3",
+                               "@wordpress/media-utils": "^3.0.4",
+                               "@wordpress/notices": "^3.2.6",
+                               "@wordpress/plugins": "^4.0.5",
+                               "@wordpress/primitives": "^3.0.3",
+                               "@wordpress/url": "^3.3.0",
+                               "classnames": "^2.3.1",
+                               "downloadjs": "^1.4.7",
+                               "file-saver": "^2.0.2",
+                               "jszip": "^3.2.2",
+                               "lodash": "^4.17.21",
+                               "rememo": "^3.0.0"
+                       }
+               },
</ins><span class="cx" style="display: block; padding: 0 10px">                 "@wordpress/edit-widgets": {
</span><span class="cx" style="display: block; padding: 0 10px">                        "version": "3.1.0",
</span><span class="cx" style="display: block; padding: 0 10px">                        "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-3.1.0.tgz",
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -7438,7 +7476,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><span class="cx" style="display: block; padding: 0 10px">                "browserify-aes": {
</span><span class="cx" style="display: block; padding: 0 10px">                        "version": "1.2.0",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
</ins><span class="cx" style="display: block; padding: 0 10px">                         "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
</span><span class="cx" style="display: block; padding: 0 10px">                        "dev": true,
</span><span class="cx" style="display: block; padding: 0 10px">                        "requires": {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -10097,6 +10135,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                "downloadjs": {
+                       "version": "1.4.7",
+                       "resolved": "https://registry.npmjs.org/downloadjs/-/downloadjs-1.4.7.tgz",
+                       "integrity": "sha1-9p+W+UDg0FU9rCkROYZaPNAQHjw="
+               },
</ins><span class="cx" style="display: block; padding: 0 10px">                 "downshift": {
</span><span class="cx" style="display: block; padding: 0 10px">                        "version": "6.1.7",
</span><span class="cx" style="display: block; padding: 0 10px">                        "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.7.tgz",
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -12061,6 +12104,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                "flat-cache": "^3.0.4"
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                "file-saver": {
+                       "version": "2.0.5",
+                       "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
+                       "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
+               },
</ins><span class="cx" style="display: block; padding: 0 10px">                 "file-sync-cmp": {
</span><span class="cx" style="display: block; padding: 0 10px">                        "version": "0.1.1",
</span><span class="cx" style="display: block; padding: 0 10px">                        "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz",
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -14372,6 +14420,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                "ev-emitter": "^1.0.0"
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                "immediate": {
+                       "version": "3.0.6",
+                       "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+                       "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
+               },
</ins><span class="cx" style="display: block; padding: 0 10px">                 "import-fresh": {
</span><span class="cx" style="display: block; padding: 0 10px">                        "version": "3.3.0",
</span><span class="cx" style="display: block; padding: 0 10px">                        "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -16924,6 +16977,17 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                "object.assign": "^4.1.2"
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                "jszip": {
+                       "version": "3.7.1",
+                       "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz",
+                       "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==",
+                       "requires": {
+                               "lie": "~3.3.0",
+                               "pako": "~1.0.2",
+                               "readable-stream": "~2.3.6",
+                               "set-immediate-shim": "~1.0.1"
+                       }
+               },
</ins><span class="cx" style="display: block; padding: 0 10px">                 "just-extend": {
</span><span class="cx" style="display: block; padding: 0 10px">                        "version": "4.2.1",
</span><span class="cx" style="display: block; padding: 0 10px">                        "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -17202,6 +17266,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                "type-check": "~0.4.0"
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                "lie": {
+                       "version": "3.3.0",
+                       "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+                       "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+                       "requires": {
+                               "immediate": "~3.0.5"
+                       }
+               },
</ins><span class="cx" style="display: block; padding: 0 10px">                 "liftup": {
</span><span class="cx" style="display: block; padding: 0 10px">                        "version": "3.0.1",
</span><span class="cx" style="display: block; padding: 0 10px">                        "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz",
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -19837,8 +19909,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                "pako": {
</span><span class="cx" style="display: block; padding: 0 10px">                        "version": "1.0.11",
</span><span class="cx" style="display: block; padding: 0 10px">                        "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
-                       "dev": true
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
</ins><span class="cx" style="display: block; padding: 0 10px">                 },
</span><span class="cx" style="display: block; padding: 0 10px">                "parallel-transform": {
</span><span class="cx" style="display: block; padding: 0 10px">                        "version": "1.2.0",
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -22865,6 +22936,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
</span><span class="cx" style="display: block; padding: 0 10px">                        "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                "set-immediate-shim": {
+                       "version": "1.0.1",
+                       "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+                       "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
+               },
</ins><span class="cx" style="display: block; padding: 0 10px">                 "set-value": {
</span><span class="cx" style="display: block; padding: 0 10px">                        "version": "2.0.1",
</span><span class="cx" style="display: block; padding: 0 10px">                        "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
</span></span></pre></div>
<a id="trunkpackagejson"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/package.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/package.json        2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/package.json  2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -99,6 +99,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                "@wordpress/dom": "3.2.6",
</span><span class="cx" style="display: block; padding: 0 10px">                "@wordpress/dom-ready": "3.2.2",
</span><span class="cx" style="display: block; padding: 0 10px">                "@wordpress/edit-post": "5.0.5",
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                "@wordpress/edit-site": "3.0.5",
</ins><span class="cx" style="display: block; padding: 0 10px">                 "@wordpress/edit-widgets": "3.1.0",
</span><span class="cx" style="display: block; padding: 0 10px">                "@wordpress/editor": "12.0.2",
</span><span class="cx" style="display: block; padding: 0 10px">                "@wordpress/element": "4.0.3",
</span></span></pre></div>
<a id="trunksrcwpadminmenuphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/menu.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/menu.php       2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-admin/menu.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -202,8 +202,24 @@
</span><span class="cx" style="display: block; padding: 0 10px">        /* translators: %s: Number of available theme updates. */
</span><span class="cx" style="display: block; padding: 0 10px">        $submenu['themes.php'][5] = array( sprintf( __( 'Themes %s' ), $count ), $appearance_cap, 'themes.php' );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+if ( wp_is_block_template_theme() ) {
+       $submenu['themes.php'][6] = array(
+               sprintf(
+                       /* translators: %s: "beta" label */
+                       __( 'Editor %s' ),
+                       '<span class="awaiting-mod">' . __( 'beta' ) . '</span>'
+               ),
+               'edit_theme_options',
+               'site-editor.php',
+       );
+}
+
+// Hide Customize link on block themes unless a plugin or theme is using
+// customize_register to add a setting.
+if ( ! wp_is_block_template_theme() || has_action( 'customize_register' ) ) {
</ins><span class="cx" style="display: block; padding: 0 10px">         $customize_url            = add_query_arg( 'return', urlencode( remove_query_arg( wp_removable_query_args(), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ), 'customize.php' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        $submenu['themes.php'][6] = array( __( 'Customize' ), 'customize', esc_url( $customize_url ), '', 'hide-if-no-customize' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $submenu['themes.php'][7] = array( __( 'Customize' ), 'customize', esc_url( $customize_url ), '', 'hide-if-no-customize' );
+}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> if ( current_theme_supports( 'menus' ) || current_theme_supports( 'widgets' ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">        $submenu['themes.php'][10] = array( __( 'Menus' ), 'edit_theme_options', 'nav-menus.php' );
</span></span></pre></div>
<a id="trunksrcwpadminsiteeditorphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-admin/site-editor.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/site-editor.php                                (rev 0)
+++ trunk/src/wp-admin/site-editor.php  2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,115 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Site Editor administration screen.
+ *
+ * @package WordPress
+ * @subpackage Administration
+ */
+
+global $post, $editor_styles;
+
+/** WordPress Administration Bootstrap */
+require_once __DIR__ . '/admin.php';
+
+if ( ! current_user_can( 'edit_theme_options' ) ) {
+       wp_die(
+               '<h1>' . __( 'You need a higher level of permission.' ) . '</h1>' .
+               '<p>' . __( 'Sorry, you are not allowed to edit theme options on this site.' ) . '</p>',
+               403
+       );
+}
+
+if ( ! wp_is_block_template_theme() ) {
+       wp_die( __( 'The theme you are currently using is not compatible with Full Site Editing.' ) );
+}
+
+// Used in the HTML title tag.
+$title       = __( 'Editor (beta)' );
+$parent_file = 'themes.php';
+
+// Flag that we're loading the block editor.
+$current_screen = get_current_screen();
+$current_screen->is_block_editor( true );
+
+$block_editor_context = new WP_Block_Editor_Context();
+
+$active_global_styles_id = WP_Theme_JSON_Resolver::get_user_custom_post_type_id();
+$active_theme            = wp_get_theme()->get_stylesheet();
+$preload_paths           = array(
+       array( '/wp/v2/media', 'OPTIONS' ),
+       '/',
+       '/wp/v2/types?context=edit',
+       '/wp/v2/taxonomies?context=edit',
+       '/wp/v2/pages?context=edit',
+       '/wp/v2/categories?context=edit',
+       '/wp/v2/posts?context=edit',
+       '/wp/v2/tags?context=edit',
+       '/wp/v2/templates?context=edit',
+       '/wp/v2/template-parts?context=edit',
+       '/wp/v2/settings',
+       '/wp/v2/themes?context=edit&status=active',
+       '/wp/v2/global-styles/' . $active_global_styles_id . '?context=edit',
+       '/wp/v2/global-styles/' . $active_global_styles_id,
+       '/wp/v2/themes/' . $active_theme . '/global-styles',
+);
+block_editor_rest_api_preload( $preload_paths, $block_editor_context );
+
+$editor_settings = get_block_editor_settings(
+       array(
+               'siteUrl'                              => site_url(),
+               'postsPerPage'                         => get_option( 'posts_per_page' ),
+               'styles'                               => get_block_editor_theme_styles(),
+               'defaultTemplateTypes'                 => get_default_block_template_types(),
+               'defaultTemplatePartAreas'             => get_allowed_block_template_part_areas(),
+               '__experimentalBlockPatterns'          => WP_Block_Patterns_Registry::get_instance()->get_all_registered(),
+               '__experimentalBlockPatternCategories' => WP_Block_Pattern_Categories_Registry::get_instance()->get_all_registered(),
+       ),
+       $block_editor_context
+);
+
+wp_add_inline_script(
+       'wp-edit-site',
+       sprintf(
+               'wp.domReady( function() {
+                       wp.editSite.initialize( "site-editor", %s );
+               } );',
+               wp_json_encode( $editor_settings )
+       )
+);
+
+// Preload server-registered block schemas.
+wp_add_inline_script(
+       'wp-blocks',
+       'wp.blocks.unstable__bootstrapServerSideBlockDefinitions(' . wp_json_encode( get_block_editor_server_block_settings() ) . ');'
+);
+
+wp_add_inline_script(
+       'wp-blocks',
+       sprintf( 'wp.blocks.setCategories( %s );', wp_json_encode( get_block_categories( $post ) ) ),
+       'after'
+);
+
+wp_enqueue_script( 'wp-edit-site' );
+wp_enqueue_script( 'wp-format-library' );
+wp_enqueue_style( 'wp-edit-site' );
+wp_enqueue_style( 'wp-format-library' );
+wp_enqueue_media();
+
+if (
+       current_theme_supports( 'wp-block-styles' ) ||
+       ( ! is_array( $editor_styles ) || count( $editor_styles ) === 0 )
+) {
+       wp_enqueue_style( 'wp-block-library-theme' );
+}
+
+/** This action is documented in wp-admin/edit-form-blocks.php */
+do_action( 'enqueue_block_editor_assets' );
+
+require_once ABSPATH . 'wp-admin/admin-header.php';
+?>
+
+<div id="site-editor" class="edit-site"></div>
+
+<?php
+
+require_once ABSPATH . 'wp-admin/admin-footer.php';
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-admin/site-editor.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesassetsscriptloaderpackagesphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/assets/script-loader-packages.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/assets/script-loader-packages.php   2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/assets/script-loader-packages.php     2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +1 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-<?php return array('a11y.js' => array('dependencies' => array('wp-dom-ready', 'wp-i18n', 'wp-polyfill'), 'version' => '531b91a758b525158d15c140a522819b'), 'annotations.js' => array('dependencies' => array('lodash', 'wp-data', 'wp-hooks', 'wp-i18n', 'wp-polyfill', 'wp-rich-text'), 'version' => '460983ea433ad4adb480359a940d1271'), 'api-fetch.js' => array('dependencies' => array('wp-i18n', 'wp-polyfill', 'wp-url'), 'version' => 'e57113647e68a852cb7b1cd8e140bc82'), 'autop.js' => array('dependencies' => array('wp-polyfill'), 'version' => '98ee456bef50e518083b2d908b12efd6'), 'blob.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'b8855b04f6a52a7bca89f8d945d46866'), 'block-directory.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-cor
 e-data', 'wp-data', 'wp-edit-post', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives'), 'version' => 'e3b4864b1761f45559b125d181eeccea'), 'block-editor.js' => array('dependencies' => array('lodash', 'react', 'react-dom', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-polyfill', 'wp-primitives', 'wp-rich-text', 'wp-shortcode', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => '078463eccb0f2a6c4b207270e5938454'), 'block-library.js' => array('dependencies' => array('lodash', 'moment', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp
 -element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keycodes', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-reusable-blocks', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport'), 'version' => '0a3e4865c8c2025c841cea5aee3c6e84'), 'block-serialization-default-parser.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'cc8e5d0e23cf68bb9944bf2a7a016e52'), 'blocks.js' => array('dependencies' => array('lodash', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-shortcode'), 'version' => '85a08117e58397f5e519e8ee9f1ef820'), 'components.js' => array('dependencies' => array('lodash', 'moment', 'react', 'react-dom', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', '
 wp-polyfill', 'wp-primitives', 'wp-rich-text', 'wp-warning'), 'version' => '1e5a68c6be5b9cc6532d58a5062c4707'), 'compose.js' => array('dependencies' => array('lodash', 'react', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-polyfill', 'wp-priority-queue'), 'version' => '68b1701c372843d24a167ee93e21f28f'), 'core-data.js' => array('dependencies' => array('lodash', 'wp-api-fetch', 'wp-blocks', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-url'), 'version' => '2df3489e429bffb1891d0d748c7b4b31'), 'customize-widgets.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-vie
 wport', 'wp-widgets'), 'version' => '61524e8db487c3e60a2b3ce6e5371dbd'), 'data.js' => array('dependencies' => array('lodash', 'react', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-priority-queue', 'wp-redux-routine'), 'version' => '3fa92a13f4f6644731f73af5ecdbf518'), 'data-controls.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated', 'wp-polyfill'), 'version' => 'ceef9ce8c9c058d69ebf44db39353687'), 'date.js' => array('dependencies' => array('moment', 'wp-polyfill'), 'version' => '70a2be92e6099f67b996b8a7e0266f5c'), 'deprecated.js' => array('dependencies' => array('wp-hooks', 'wp-polyfill'), 'version' => '13724e4923d40e224e7c99fdc350a6a1'), 'dom.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => '567a844d6765c6c0422c55df898f1681'), 'dom-ready.js' => array('dependencies' => array('wp-polyfill'), 'version' => '1e1b9c1535c1c32d3236d41aa2
 7c7bf9'), 'edit-post.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-data-controls', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-url', 'wp-viewport', 'wp-warning'), 'version' => 'ee6c27d32b67d2c0f22907b72d8762ed'), 'edit-widgets.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-reusable-blocks', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => 'b921a96625a3d8c0d1e0d7472df34de8'), 'editor.js' => array('dependencies
 ' => array('lodash', 'react', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-data-controls', 'wp-date', 'wp-deprecated', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-polyfill', 'wp-primitives', 'wp-reusable-blocks', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-wordcount'), 'version' => 'c6e02b89186dd132d70191c58a3dec41'), 'element.js' => array('dependencies' => array('lodash', 'react', 'react-dom', 'wp-escape-html', 'wp-polyfill'), 'version' => 'ed6d85e269fcb3632c76dec6b9ac02f1'), 'escape-html.js' => array('dependencies' => array('wp-polyfill'), 'version' => '4f03d9c45a01df8191f6833373fe1cfa'), 'format-library.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-polyfill', 'wp-primitiv
 es', 'wp-rich-text', 'wp-url'), 'version' => '86f8584fd0845366c326ed2e31326a1e'), 'hooks.js' => array('dependencies' => array('wp-polyfill'), 'version' => '02fd2defc23cb5c2837081df67b97158'), 'html-entities.js' => array('dependencies' => array('wp-polyfill'), 'version' => '140ecb91be91e7eec34220584d085033'), 'i18n.js' => array('dependencies' => array('wp-hooks', 'wp-polyfill'), 'version' => '48abe0c2523b902e445788bb8132ef7e'), 'is-shallow-equal.js' => array('dependencies' => array('wp-polyfill'), 'version' => '798b660598677b39413fdb5f68624aa8'), 'keyboard-shortcuts.js' => array('dependencies' => array('lodash', 'wp-data', 'wp-element', 'wp-keycodes', 'wp-polyfill'), 'version' => '03be8557c1d6f9c98d9f2a39b0d45968'), 'keycodes.js' => array('dependencies' => array('lodash', 'wp-i18n', 'wp-polyfill'), 'version' => '34f4da80b9b52d7f35a142592777b29c'), 'list-reusable-blocks.js' => array('dependencies' => array('lodash', 'wp-ap
 i-fetch', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n', 'wp-polyfill'), 'version' => '99752f8ee65e66fefce46b8af1dac732'), 'media-utils.js' => array('dependencies' => array('lodash', 'wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n', 'wp-polyfill'), 'version' => '52a1fb71f5e51adfecbe905eccae04b4'), 'notices.js' => array('dependencies' => array('lodash', 'wp-data', 'wp-polyfill'), 'version' => '0b40907eed64e81bf22bb448c88642d3'), 'nux.js' => array('dependencies' => array('lodash', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-primitives'), 'version' => '1120e26c43e94121389f5d1c9f6e89b6'), 'plugins.js' => array('dependencies' => array('lodash', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-polyfill', 'wp-primitives'), 'version' => 'c860421df5601d15a8df4afcbc212304'), 'primitives.js' => array('dependencies' => array('wp-element', 'wp-polyfill'), 'version' => 'dc0962ac2885a26
 f8c2abdbe0cf0e333'), 'priority-queue.js' => array('dependencies' => array('wp-polyfill'), 'version' => '18c93919f04bb681234310b314675b17'), 'redux-routine.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => 'c825bcfd263c88dcd76e14b67d47340b'), 'reusable-blocks.js' => array('dependencies' => array('lodash', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-polyfill', 'wp-primitives', 'wp-url'), 'version' => '2d4d45c0e771117074787655ee5efbcb'), 'rich-text.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-compose', 'wp-data', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes', 'wp-polyfill'), 'version' => '04ed6c49d04854d7ca20cb9d321e5e87'), 'server-side-render.js' => array('dependencies' => array('lodash', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-polyfill', 'w
 p-url'), 'version' => '04ce14348d15952b7f9fed3b6e32a745'), 'shortcode.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => '15757929bc8d52a3b184c3fcaeb38c64'), 'token-list.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => '7bcd3684420783ef1f6ebb7680fe958e'), 'url.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => 'ef8beff0847cbaa0e337362716c13bea'), 'viewport.js' => array('dependencies' => array('lodash', 'wp-compose', 'wp-data', 'wp-element', 'wp-polyfill'), 'version' => 'a4b7cdcc29f09d698255b3aec03ac6c1'), 'warning.js' => array('dependencies' => array('wp-polyfill'), 'version' => '5ebe2df53cf3c74ebffc7e2d3e76184c'), 'widgets.js' => array('dependencies' => array('lodash', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-polyfill', 'wp-primitives'), 'version'
  => 'd8086829048e496d396102031b6b98f4'), 'wordcount.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => '02339c8ad03da1e7a03f9212da004007'));
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php return array('a11y.js' => array('dependencies' => array('wp-dom-ready', 'wp-i18n', 'wp-polyfill'), 'version' => '531b91a758b525158d15c140a522819b'), 'annotations.js' => array('dependencies' => array('lodash', 'wp-data', 'wp-hooks', 'wp-i18n', 'wp-polyfill', 'wp-rich-text'), 'version' => '460983ea433ad4adb480359a940d1271'), 'api-fetch.js' => array('dependencies' => array('wp-i18n', 'wp-polyfill', 'wp-url'), 'version' => 'e57113647e68a852cb7b1cd8e140bc82'), 'autop.js' => array('dependencies' => array('wp-polyfill'), 'version' => '98ee456bef50e518083b2d908b12efd6'), 'blob.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'b8855b04f6a52a7bca89f8d945d46866'), 'block-directory.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-cor
 e-data', 'wp-data', 'wp-edit-post', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives'), 'version' => 'e3b4864b1761f45559b125d181eeccea'), 'block-editor.js' => array('dependencies' => array('lodash', 'react', 'react-dom', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-polyfill', 'wp-primitives', 'wp-rich-text', 'wp-shortcode', 'wp-token-list', 'wp-url', 'wp-warning', 'wp-wordcount'), 'version' => '078463eccb0f2a6c4b207270e5938454'), 'block-library.js' => array('dependencies' => array('lodash', 'moment', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp
 -element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keycodes', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-reusable-blocks', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport'), 'version' => '0a3e4865c8c2025c841cea5aee3c6e84'), 'block-serialization-default-parser.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'cc8e5d0e23cf68bb9944bf2a7a016e52'), 'blocks.js' => array('dependencies' => array('lodash', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-shortcode'), 'version' => '85a08117e58397f5e519e8ee9f1ef820'), 'components.js' => array('dependencies' => array('lodash', 'moment', 'react', 'react-dom', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', '
 wp-polyfill', 'wp-primitives', 'wp-rich-text', 'wp-warning'), 'version' => '1e5a68c6be5b9cc6532d58a5062c4707'), 'compose.js' => array('dependencies' => array('lodash', 'react', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-polyfill', 'wp-priority-queue'), 'version' => '68b1701c372843d24a167ee93e21f28f'), 'core-data.js' => array('dependencies' => array('lodash', 'wp-api-fetch', 'wp-blocks', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-url'), 'version' => '2df3489e429bffb1891d0d748c7b4b31'), 'customize-widgets.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-vie
 wport', 'wp-widgets'), 'version' => '61524e8db487c3e60a2b3ce6e5371dbd'), 'data.js' => array('dependencies' => array('lodash', 'react', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-priority-queue', 'wp-redux-routine'), 'version' => '3fa92a13f4f6644731f73af5ecdbf518'), 'data-controls.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated', 'wp-polyfill'), 'version' => 'ceef9ce8c9c058d69ebf44db39353687'), 'date.js' => array('dependencies' => array('moment', 'wp-polyfill'), 'version' => '70a2be92e6099f67b996b8a7e0266f5c'), 'deprecated.js' => array('dependencies' => array('wp-hooks', 'wp-polyfill'), 'version' => '13724e4923d40e224e7c99fdc350a6a1'), 'dom.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => '567a844d6765c6c0422c55df898f1681'), 'dom-ready.js' => array('dependencies' => array('wp-polyfill'), 'version' => '1e1b9c1535c1c32d3236d41aa2
 7c7bf9'), 'edit-post.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-data-controls', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-url', 'wp-viewport', 'wp-warning'), 'version' => 'ee6c27d32b67d2c0f22907b72d8762ed'), 'edit-site.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-data-controls', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-url', 'wp-viewport'), 'version' => '162621f7d189e8e2a1bfe12183f73ece'), 'edit-widgets.js' => array('dependencies' => ar
 ray('lodash', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-reusable-blocks', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => 'b921a96625a3d8c0d1e0d7472df34de8'), 'editor.js' => array('dependencies' => array('lodash', 'react', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-data-controls', 'wp-date', 'wp-deprecated', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-polyfill', 'wp-primitives', 'wp-reusable-blocks', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-wordcount'), 'version' => 'c6e02b89186dd132d70191c58a3dec41'), 'element.js' => array('d
 ependencies' => array('lodash', 'react', 'react-dom', 'wp-escape-html', 'wp-polyfill'), 'version' => 'ed6d85e269fcb3632c76dec6b9ac02f1'), 'escape-html.js' => array('dependencies' => array('wp-polyfill'), 'version' => '4f03d9c45a01df8191f6833373fe1cfa'), 'format-library.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-polyfill', 'wp-primitives', 'wp-rich-text', 'wp-url'), 'version' => '86f8584fd0845366c326ed2e31326a1e'), 'hooks.js' => array('dependencies' => array('wp-polyfill'), 'version' => '02fd2defc23cb5c2837081df67b97158'), 'html-entities.js' => array('dependencies' => array('wp-polyfill'), 'version' => '140ecb91be91e7eec34220584d085033'), 'i18n.js' => array('dependencies' => array('wp-hooks', 'wp-polyfill'), 'version' => '48abe0c2523b902e445788bb8132ef7e'), 'is-shallow-equal.js' => array('dependencies' => array('wp-pol
 yfill'), 'version' => '798b660598677b39413fdb5f68624aa8'), 'keyboard-shortcuts.js' => array('dependencies' => array('lodash', 'wp-data', 'wp-element', 'wp-keycodes', 'wp-polyfill'), 'version' => '03be8557c1d6f9c98d9f2a39b0d45968'), 'keycodes.js' => array('dependencies' => array('lodash', 'wp-i18n', 'wp-polyfill'), 'version' => '34f4da80b9b52d7f35a142592777b29c'), 'list-reusable-blocks.js' => array('dependencies' => array('lodash', 'wp-api-fetch', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n', 'wp-polyfill'), 'version' => '99752f8ee65e66fefce46b8af1dac732'), 'media-utils.js' => array('dependencies' => array('lodash', 'wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n', 'wp-polyfill'), 'version' => '52a1fb71f5e51adfecbe905eccae04b4'), 'notices.js' => array('dependencies' => array('lodash', 'wp-data', 'wp-polyfill'), 'version' => '0b40907eed64e81bf22bb448c88642d3'), 'nux.js' => array('dependencies' => array('lodash', 'wp-com
 ponents', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-primitives'), 'version' => '1120e26c43e94121389f5d1c9f6e89b6'), 'plugins.js' => array('dependencies' => array('lodash', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-polyfill', 'wp-primitives'), 'version' => 'c860421df5601d15a8df4afcbc212304'), 'primitives.js' => array('dependencies' => array('wp-element', 'wp-polyfill'), 'version' => 'dc0962ac2885a26f8c2abdbe0cf0e333'), 'priority-queue.js' => array('dependencies' => array('wp-polyfill'), 'version' => '18c93919f04bb681234310b314675b17'), 'redux-routine.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => 'c825bcfd263c88dcd76e14b67d47340b'), 'reusable-blocks.js' => array('dependencies' => array('lodash', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-polyfill', 'wp-primitives', 'wp-url'), 'version' =>
  '2d4d45c0e771117074787655ee5efbcb'), 'rich-text.js' => array('dependencies' => array('lodash', 'wp-a11y', 'wp-compose', 'wp-data', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes', 'wp-polyfill'), 'version' => '04ed6c49d04854d7ca20cb9d321e5e87'), 'server-side-render.js' => array('dependencies' => array('lodash', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-url'), 'version' => '04ce14348d15952b7f9fed3b6e32a745'), 'shortcode.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => '15757929bc8d52a3b184c3fcaeb38c64'), 'token-list.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => '7bcd3684420783ef1f6ebb7680fe958e'), 'url.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => 'ef8beff0847cbaa0e337362716c13bea'), 'viewport.js' => array('dependencies' => array('lodash', 'wp-compos
 e', 'wp-data', 'wp-element', 'wp-polyfill'), 'version' => 'a4b7cdcc29f09d698255b3aec03ac6c1'), 'warning.js' => array('dependencies' => array('wp-polyfill'), 'version' => '5ebe2df53cf3c74ebffc7e2d3e76184c'), 'widgets.js' => array('dependencies' => array('lodash', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-polyfill', 'wp-primitives'), 'version' => 'd8086829048e496d396102031b6b98f4'), 'wordcount.js' => array('dependencies' => array('lodash', 'wp-polyfill'), 'version' => '02339c8ad03da1e7a03f9212da004007'));
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesblockpatternsquerymediumpostsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/block-patterns/query-medium-posts.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-patterns/query-medium-posts.php       2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-patterns/query-medium-posts.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9,7 +9,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        'title'      => _x( 'Image at left', 'Block pattern title' ),
</span><span class="cx" style="display: block; padding: 0 10px">        'blockTypes' => array( 'core/query' ),
</span><span class="cx" style="display: block; padding: 0 10px">        'categories' => array( 'query' ),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        'content'    => '<!-- wp:query {"query":{"perPage":1,"pages":0,"offset":0,"postType":"post","categoryIds":[],"tagIds":[],"order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'content'    => '<!-- wp:query {"query":{"perPage":3,"pages":0,"offset":0,"postType":"post","categoryIds":[],"tagIds":[],"order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->
</ins><span class="cx" style="display: block; padding: 0 10px">                                         <div class="wp-block-query">
</span><span class="cx" style="display: block; padding: 0 10px">                                        <!-- wp:post-template -->
</span><span class="cx" style="display: block; padding: 0 10px">                                        <!-- wp:columns {"align":"wide"} -->
</span></span></pre></div>
<a id="trunksrcwpincludesblockpatternsquerysmallpostsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/block-patterns/query-small-posts.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-patterns/query-small-posts.php        2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-patterns/query-small-posts.php  2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9,7 +9,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        'title'      => _x( 'Small image and title', 'Block pattern title' ),
</span><span class="cx" style="display: block; padding: 0 10px">        'blockTypes' => array( 'core/query' ),
</span><span class="cx" style="display: block; padding: 0 10px">        'categories' => array( 'query' ),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        'content'    => '<!-- wp:query {"query":{"perPage":1,"pages":0,"offset":0,"postType":"post","categoryIds":[],"tagIds":[],"order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'content'    => '<!-- wp:query {"query":{"perPage":3,"pages":0,"offset":0,"postType":"post","categoryIds":[],"tagIds":[],"order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->
</ins><span class="cx" style="display: block; padding: 0 10px">                                         <div class="wp-block-query">
</span><span class="cx" style="display: block; padding: 0 10px">                                        <!-- wp:post-template -->
</span><span class="cx" style="display: block; padding: 0 10px">                                        <!-- wp:columns {"verticalAlignment":"center"} -->
</span></span></pre></div>
<a id="trunksrcwpincludesblockpatternsquerystandardpostsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/block-patterns/query-standard-posts.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-patterns/query-standard-posts.php     2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-patterns/query-standard-posts.php       2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9,7 +9,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        'title'      => _x( 'Standard', 'Block pattern title' ),
</span><span class="cx" style="display: block; padding: 0 10px">        'blockTypes' => array( 'core/query' ),
</span><span class="cx" style="display: block; padding: 0 10px">        'categories' => array( 'query' ),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        'content'    => '<!-- wp:query {"query":{"perPage":1,"pages":0,"offset":0,"postType":"post","categoryIds":[],"tagIds":[],"order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'content'    => '<!-- wp:query {"query":{"perPage":3,"pages":0,"offset":0,"postType":"post","categoryIds":[],"tagIds":[],"order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->
</ins><span class="cx" style="display: block; padding: 0 10px">                                         <div class="wp-block-query">
</span><span class="cx" style="display: block; padding: 0 10px">                                        <!-- wp:post-template -->
</span><span class="cx" style="display: block; padding: 0 10px">                                        <!-- wp:post-title {"isLink":true} /-->
</span></span></pre></div>
<a id="trunksrcwpincludesblocksupportsborderphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/block-supports/border.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-supports/border.php   2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-supports/border.php     2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -63,8 +63,23 @@
</span><span class="cx" style="display: block; padding: 0 10px">                wp_has_border_feature_support( $block_type, 'radius' ) &&
</span><span class="cx" style="display: block; padding: 0 10px">                isset( $block_attributes['style']['border']['radius'] )
</span><span class="cx" style="display: block; padding: 0 10px">        ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $border_radius = (int) $block_attributes['style']['border']['radius'];
-               $styles[]      = sprintf( 'border-radius: %dpx;', $border_radius );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $border_radius = $block_attributes['style']['border']['radius'];
+
+               if ( is_array( $border_radius ) ) {
+                       // We have individual border radius corner values.
+                       foreach ( $border_radius as $key => $radius ) {
+                               // Convert CamelCase corner name to kebab-case.
+                               $corner   = strtolower( preg_replace( '/(?<!^)[A-Z]/', '-$0', $key ) );
+                               $styles[] = sprintf( 'border-%s-radius: %s;', $corner, $radius );
+                       }
+               } else {
+                       // This check handles original unitless implementation.
+                       if ( is_numeric( $border_radius ) ) {
+                               $border_radius .= 'px';
+                       }
+
+                       $styles[] = sprintf( 'border-radius: %s;', $border_radius );
+               }
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        // Border style.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -81,8 +96,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">                wp_has_border_feature_support( $block_type, 'width' ) &&
</span><span class="cx" style="display: block; padding: 0 10px">                isset( $block_attributes['style']['border']['width'] )
</span><span class="cx" style="display: block; padding: 0 10px">        ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $border_width = intval( $block_attributes['style']['border']['width'] );
-               $styles[]     = sprintf( 'border-width: %dpx;', $border_width );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $border_width = $block_attributes['style']['border']['width'];
+
+               // This check handles original unitless implementation.
+               if ( is_numeric( $border_width ) ) {
+                       $border_width .= 'px';
+               }
+
+               $styles[] = sprintf( 'border-width: %s;', $border_width );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        // Border color.
</span></span></pre></div>
<a id="trunksrcwpincludesblocksupportscolorsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/block-supports/colors.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-supports/colors.php   2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-supports/colors.php     2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -99,7 +99,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px">                // Apply color class or inline style.
</span><span class="cx" style="display: block; padding: 0 10px">                if ( $has_named_text_color ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $classes[] = sprintf( 'has-%s-color', $block_attributes['textColor'] );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 $classes[] = sprintf( 'has-%s-color', _wp_to_kebab_case( $block_attributes['textColor'] ) );
</ins><span class="cx" style="display: block; padding: 0 10px">                 } elseif ( $has_custom_text_color ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $styles[] = sprintf( 'color: %s;', $block_attributes['style']['color']['text'] );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -116,7 +116,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px">                // Apply background color classes or styles.
</span><span class="cx" style="display: block; padding: 0 10px">                if ( $has_named_background_color ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $classes[] = sprintf( 'has-%s-background-color', $block_attributes['backgroundColor'] );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 $classes[] = sprintf( 'has-%s-background-color', _wp_to_kebab_case( $block_attributes['backgroundColor'] ) );
</ins><span class="cx" style="display: block; padding: 0 10px">                 } elseif ( $has_custom_background_color ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $styles[] = sprintf( 'background-color: %s;', $block_attributes['style']['color']['background'] );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -132,7 +132,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px">                // Apply required background class.
</span><span class="cx" style="display: block; padding: 0 10px">                if ( $has_named_gradient ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $classes[] = sprintf( 'has-%s-gradient-background', $block_attributes['gradient'] );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 $classes[] = sprintf( 'has-%s-gradient-background', _wp_to_kebab_case( $block_attributes['gradient'] ) );
</ins><span class="cx" style="display: block; padding: 0 10px">                 } elseif ( $has_custom_gradient ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $styles[] = sprintf( 'background: %s;', $block_attributes['style']['color']['gradient'] );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span></span></pre></div>
<a id="trunksrcwpincludesblocksupportsdimensionsphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/block-supports/dimensions.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-supports/dimensions.php                               (rev 0)
+++ trunk/src/wp-includes/block-supports/dimensions.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,92 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Dimensions block support flag.
+ *
+ * This does not include the `spacing` block support even though that visually
+ * appears under the "Dimensions" panel in the editor. It remains in its
+ * original `spacing.php` file for backwards compatibility.
+ *
+ * @package WordPress
+ * @since 5.9.0
+ */
+
+/**
+ * Registers the style block attribute for block types that support it.
+ *
+ * @since 5.9.0
+ * @access private
+ *
+ * @param WP_Block_Type $block_type Block Type.
+ */
+function wp_register_dimensions_support( $block_type ) {
+       // Setup attributes and styles within that if needed.
+       if ( ! $block_type->attributes ) {
+               $block_type->attributes = array();
+       }
+
+       // Check for existing style attribute definition e.g. from block.json.
+       if ( array_key_exists( 'style', $block_type->attributes ) ) {
+               return;
+       }
+
+       $has_dimensions_support = block_has_support( $block_type, array( '__experimentalDimensions' ), false );
+       // Future block supports such as height & width will be added here.
+
+       if ( $has_dimensions_support ) {
+               $block_type->attributes['style'] = array(
+                       'type' => 'object',
+               );
+       }
+}
+
+/**
+ * Add CSS classes for block dimensions to the incoming attributes array.
+ * This will be applied to the block markup in the front-end.
+ *
+ * @since 5.9.0
+ * @access private
+ *
+ * @param WP_Block_Type $block_type       Block Type.
+ * @param array         $block_attributes Block attributes.
+ *
+ * @return array Block dimensions CSS classes and inline styles.
+ */
+function wp_apply_dimensions_support( $block_type, $block_attributes ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
+       if ( wp_skip_dimensions_serialization( $block_type ) ) {
+               return array();
+       }
+
+       $styles = array();
+
+       // Height support to be added in near future.
+       // Width support to be added in near future.
+
+       return empty( $styles ) ? array() : array( 'style' => implode( ' ', $styles ) );
+}
+
+/**
+ * Checks whether serialization of the current block's dimensions properties
+ * should occur.
+ *
+ * @since 5.9.0
+ * @access private
+ *
+ * @param WP_Block_type $block_type Block type.
+ *
+ * @return boolean Whether to serialize spacing support styles & classes.
+ */
+function wp_skip_dimensions_serialization( $block_type ) {
+       $dimensions_support = _wp_array_get( $block_type->supports, array( '__experimentalDimensions' ), false );
+       return is_array( $dimensions_support ) &&
+               array_key_exists( '__experimentalSkipSerialization', $dimensions_support ) &&
+               $dimensions_support['__experimentalSkipSerialization'];
+}
+
+// Register the block support.
+WP_Block_Supports::get_instance()->register(
+       'dimensions',
+       array(
+               'register_attribute' => 'wp_register_dimensions_support',
+               'apply'              => 'wp_apply_dimensions_support',
+       )
+);
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/block-supports/dimensions.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksupportsduotonephp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/block-supports/duotone.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-supports/duotone.php  2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-supports/duotone.php    2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -266,7 +266,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        $hsla_regexp = '/^hsla' . $permissive_match4 . '$/';
</span><span class="cx" style="display: block; padding: 0 10px">        if ( preg_match( $hsla_regexp, $color_str, $match ) ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return wp_tinycolor_hsl_to_rgb(
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $rgb = wp_tinycolor_hsl_to_rgb(
</ins><span class="cx" style="display: block; padding: 0 10px">                         array(
</span><span class="cx" style="display: block; padding: 0 10px">                                'h' => $match[1],
</span><span class="cx" style="display: block; padding: 0 10px">                                's' => $match[2],
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -384,13 +384,16 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px">  * Renders the duotone filter SVG and returns the CSS filter property to
</span><span class="cx" style="display: block; padding: 0 10px">  * reference the rendered SVG.
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * @since 5.9.0
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @access private
+
+ * @param array $preset Duotone preset value as seen in theme.json.
</ins><span class="cx" style="display: block; padding: 0 10px">  *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @param array $preset Duotone preset value as seen in theme.json.
</del><span class="cx" style="display: block; padding: 0 10px">  * @return string Duotone CSS filter property.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> function wp_render_duotone_filter_preset( $preset ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -460,13 +463,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        add_action(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                /*
-                * Safari doesn't render SVG filters defined in data URIs,
-                * and SVG filters won't render in the head of a document,
-                * so the next best place to put the SVG is in the footer.
-                */
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Safari doesn't render SVG filters defined in data URIs,
+               // and SVG filters won't render in the head of a document,
+               // so the next best place to put the SVG is in the footer.
</ins><span class="cx" style="display: block; padding: 0 10px">                 is_admin() ? 'admin_footer' : 'wp_footer',
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                static function () use ( $svg ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         function () use ( $svg ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         echo $svg;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px">        );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -502,84 +503,38 @@
</span><span class="cx" style="display: block; padding: 0 10px">                return $block_content;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        $duotone_colors = $block['attrs']['style']['color']['duotone'];
-
-       $duotone_values = array(
-               'r' => array(),
-               'g' => array(),
-               'b' => array(),
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $filter_preset   = array(
+               'slug'   => uniqid(),
+               'colors' => $block['attrs']['style']['color']['duotone'],
</ins><span class="cx" style="display: block; padding: 0 10px">         );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        foreach ( $duotone_colors as $color_str ) {
-               $color = wp_tinycolor_string_to_rgb( $color_str );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $filter_property = wp_render_duotone_filter_preset( $filter_preset );
+       $filter_id       = 'wp-duotone-' . $filter_preset['slug'];
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $duotone_values['r'][] = $color['r'] / 255;
-               $duotone_values['g'][] = $color['g'] / 255;
-               $duotone_values['b'][] = $color['b'] / 255;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $scope     = '.' . $filter_id;
+       $selectors = explode( ',', $duotone_support );
+       $scoped    = array();
+       foreach ( $selectors as $sel ) {
+               $scoped[] = $scope . ' ' . trim( $sel );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        $selector = implode( ', ', $scoped );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        $duotone_id = 'wp-duotone-filter-' . uniqid();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // !important is needed because these styles render before global styles,
+       // and they should be overriding the duotone filters set by global styles.
+       $filter_style = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG
+               ? $selector . " {\n\tfilter: " . $filter_property . " !important;\n}\n"
+               : $selector . '{filter:' . $filter_property . ' !important;}';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        $selectors        = explode( ',', $duotone_support );
-       $selectors_scoped = array_map(
-               static function ( $selector ) use ( $duotone_id ) {
-                       return '.' . $duotone_id . ' ' . trim( $selector );
-               },
-               $selectors
-       );
-       $selectors_group  = implode( ', ', $selectors_scoped );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ wp_register_style( $filter_id, false, array(), true, true );
+       wp_add_inline_style( $filter_id, $filter_style );
+       wp_enqueue_style( $filter_id );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        ob_start();
-
-       ?>
-
-       <style>
-               <?php echo $selectors_group; ?> {
-                       filter: url( <?php echo esc_url( '#' . $duotone_id ); ?> );
-               }
-       </style>
-
-       <svg
-               xmlns:xlink="http://www.w3.org/1999/xlink"
-               viewBox="0 0 0 0"
-               width="0"
-               height="0"
-               focusable="false"
-               role="none"
-               style="visibility: hidden; position: absolute; left: -9999px; overflow: hidden;"
-       >
-               <defs>
-                       <filter id="<?php echo esc_attr( $duotone_id ); ?>">
-                               <feColorMatrix
-                                       type="matrix"
-                                       <?php // phpcs:disable Generic.WhiteSpace.DisallowSpaceIndent ?>
-                                       values=".299 .587 .114 0 0
-                                                       .299 .587 .114 0 0
-                                                       .299 .587 .114 0 0
-                                                       0 0 0 1 0"
-                                       <?php // phpcs:enable Generic.WhiteSpace.DisallowSpaceIndent ?>
-                               />
-                               <feComponentTransfer color-interpolation-filters="sRGB" >
-                                       <feFuncR type="table" tableValues="<?php echo esc_attr( implode( ' ', $duotone_values['r'] ) ); ?>" />
-                                       <feFuncG type="table" tableValues="<?php echo esc_attr( implode( ' ', $duotone_values['g'] ) ); ?>" />
-                                       <feFuncB type="table" tableValues="<?php echo esc_attr( implode( ' ', $duotone_values['b'] ) ); ?>" />
-                               </feComponentTransfer>
-                       </filter>
-               </defs>
-       </svg>
-
-       <?php
-
-       $duotone = ob_get_clean();
-
</del><span class="cx" style="display: block; padding: 0 10px">         // Like the layout hook, this assumes the hook only applies to blocks with a single wrapper.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        $content = preg_replace(
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return preg_replace(
</ins><span class="cx" style="display: block; padding: 0 10px">                 '/' . preg_quote( 'class="', '/' ) . '/',
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                'class="' . $duotone_id . ' ',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         'class="' . $filter_id . ' ',
</ins><span class="cx" style="display: block; padding: 0 10px">                 $block_content,
</span><span class="cx" style="display: block; padding: 0 10px">                1
</span><span class="cx" style="display: block; padding: 0 10px">        );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-       return $content . $duotone;
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> // Register the block support.
</span></span></pre></div>
<a id="trunksrcwpincludesblocksupportselementsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/block-supports/elements.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-supports/elements.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-supports/elements.php   2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -17,6 +17,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">  * @return string Filtered block content.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> function wp_render_elements_support( $block_content, $block ) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        if ( ! $block_content ) {
+               return $block_content;
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         $link_color = null;
</span><span class="cx" style="display: block; padding: 0 10px">        if ( ! empty( $block['attrs'] ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $link_color = _wp_array_get( $block['attrs'], array( 'style', 'elements', 'link', 'color', 'text' ), null );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -42,7 +46,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px">        $link_color_declaration = esc_html( safecss_filter_attr( "color: $link_color" ) );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        $style = "<style>.$class_name a{" . $link_color_declaration . " !important;}</style>\n";
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $style = "<style>.$class_name a{" . $link_color_declaration . ";}</style>\n";
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        // Like the layout hook this assumes the hook only applies to blocks with a single wrapper.
</span><span class="cx" style="display: block; padding: 0 10px">        // Retrieve the opening tag of the first HTML element.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -64,8 +68,19 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $content              = substr_replace( $block_content, ' class="' . $class_name . '"', $first_element_offset + strlen( $first_element ) - 1, 0 );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        return $content . $style;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ /*
+        * Ideally styles should be loaded in the head, but blocks may be parsed
+        * after that, so loading in the footer for now.
+        * See https://core.trac.wordpress.org/ticket/53494.
+        */
+       add_action(
+               'wp_footer',
+               static function () use ( $style ) {
+                       echo $style;
+               }
+       );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        return $content;
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> add_filter( 'render_block', 'wp_render_elements_support', 10, 2 );
</span></span></pre></div>
<a id="trunksrcwpincludesblocksupportslayoutphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/block-supports/layout.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-supports/layout.php   2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-supports/layout.php     2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -30,6 +30,106 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * Generates the CSS corresponding to the provided layout.
+ *
+ * @since 5.9.0
+ * @access private
+ *
+ * @param string  $selector CSS selector.
+ * @param array   $layout   Layout object. The one that is passed has already checked the existance of default block layout.
+ * @param boolean $has_block_gap_support Whether the theme has support for the block gap.
+ *
+ * @return string CSS style.
+ */
+function wp_get_layout_style( $selector, $layout, $has_block_gap_support = false ) {
+       $layout_type = isset( $layout['type'] ) ? $layout['type'] : 'default';
+
+       $style = '';
+       if ( 'default' === $layout_type ) {
+               $content_size = isset( $layout['contentSize'] ) ? $layout['contentSize'] : null;
+               $wide_size    = isset( $layout['wideSize'] ) ? $layout['wideSize'] : null;
+
+               $all_max_width_value  = $content_size ? $content_size : $wide_size;
+               $wide_max_width_value = $wide_size ? $wide_size : $content_size;
+
+               // Make sure there is a single CSS rule, and all tags are stripped for security.
+               // TODO: Use `safecss_filter_attr` instead - once https://core.trac.wordpress.org/ticket/46197 is patched.
+               $all_max_width_value  = wp_strip_all_tags( explode( ';', $all_max_width_value )[0] );
+               $wide_max_width_value = wp_strip_all_tags( explode( ';', $wide_max_width_value )[0] );
+
+               $style = '';
+               if ( $content_size || $wide_size ) {
+                       $style  = "$selector > * {";
+                       $style .= 'max-width: ' . esc_html( $all_max_width_value ) . ';';
+                       $style .= 'margin-left: auto !important;';
+                       $style .= 'margin-right: auto !important;';
+                       $style .= '}';
+
+                       $style .= "$selector > .alignwide { max-width: " . esc_html( $wide_max_width_value ) . ';}';
+                       $style .= "$selector .alignfull { max-width: none; }";
+               }
+
+               $style .= "$selector .alignleft { float: left; margin-right: 2em; }";
+               $style .= "$selector .alignright { float: right; margin-left: 2em; }";
+               if ( $has_block_gap_support ) {
+                       $style .= "$selector > * { margin-top: 0; margin-bottom: 0; }";
+                       $style .= "$selector > * + * { margin-top: var( --wp--style--block-gap ); margin-bottom: 0; }";
+               }
+       } elseif ( 'flex' === $layout_type ) {
+               $layout_orientation = isset( $layout['orientation'] ) ? $layout['orientation'] : 'horizontal';
+
+               $justify_content_options = array(
+                       'left'   => 'flex-start',
+                       'right'  => 'flex-end',
+                       'center' => 'center',
+               );
+
+               if ( 'horizontal' === $layout_orientation ) {
+                       $justify_content_options += array( 'space-between' => 'space-between' );
+               }
+
+               $flex_wrap_options = array( 'wrap', 'nowrap' );
+               $flex_wrap         = ! empty( $layout['flexWrap'] ) && in_array( $layout['flexWrap'], $flex_wrap_options, true ) ?
+                       $layout['flexWrap'] :
+                       'wrap';
+
+               $style  = "$selector {";
+               $style .= 'display: flex;';
+               if ( $has_block_gap_support ) {
+                       $style .= 'gap: var( --wp--style--block-gap, 0.5em );';
+               } else {
+                       $style .= 'gap: 0.5em;';
+               }
+               $style .= "flex-wrap: $flex_wrap;";
+               $style .= 'align-items: center;';
+               if ( 'horizontal' === $layout_orientation ) {
+                       $style .= 'align-items: center;';
+                       /**
+                        * Add this style only if is not empty for backwards compatibility,
+                        * since we intend to convert blocks that had flex layout implemented
+                        * by custom css.
+                        */
+                       if ( ! empty( $layout['justifyContent'] ) && array_key_exists( $layout['justifyContent'], $justify_content_options ) ) {
+                               $style .= "justify-content: {$justify_content_options[ $layout['justifyContent'] ]};";
+                               // --justification-setting allows children to inherit the value regardless or row or column direction.
+                               $style .= "--justification-setting: {$justify_content_options[ $layout['justifyContent'] ]};";
+                       }
+               } else {
+                       $style .= 'flex-direction: column;';
+                       if ( ! empty( $layout['justifyContent'] ) && array_key_exists( $layout['justifyContent'], $justify_content_options ) ) {
+                               $style .= "align-items: {$justify_content_options[ $layout['justifyContent'] ]};";
+                               $style .= "--justification-setting: {$justify_content_options[ $layout['justifyContent'] ]};";
+                       }
+               }
+               $style .= '}';
+
+               $style .= "$selector > * { margin: 0; }";
+       }
+
+       return $style;
+}
+
+/**
</ins><span class="cx" style="display: block; padding: 0 10px">  * Renders the layout config to the block wrapper.
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * @since 5.8.0
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -42,14 +142,17 @@
</span><span class="cx" style="display: block; padding: 0 10px"> function wp_render_layout_support_flag( $block_content, $block ) {
</span><span class="cx" style="display: block; padding: 0 10px">        $block_type     = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
</span><span class="cx" style="display: block; padding: 0 10px">        $support_layout = block_has_support( $block_type, array( '__experimentalLayout' ), false );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        if ( ! $support_layout || ! isset( $block['attrs']['layout'] ) ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+       if ( ! $support_layout ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $block_content;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        $used_layout = $block['attrs']['layout'];
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $block_gap             = wp_get_global_settings( array( 'spacing', 'blockGap' ) );
+       $default_layout        = wp_get_global_settings( array( 'layout' ) );
+       $has_block_gap_support = isset( $block_gap ) ? null !== $block_gap : false;
+       $default_block_layout  = _wp_array_get( $block_type->supports, array( '__experimentalLayout', 'default' ), array() );
+       $used_layout           = isset( $block['attrs']['layout'] ) ? $block['attrs']['layout'] : $default_block_layout;
</ins><span class="cx" style="display: block; padding: 0 10px">         if ( isset( $used_layout['inherit'] ) && $used_layout['inherit'] ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $tree           = WP_Theme_JSON_Resolver::get_merged_data();
-               $default_layout = _wp_array_get( $tree->get_settings(), array( 'layout' ) );
</del><span class="cx" style="display: block; padding: 0 10px">                 if ( ! $default_layout ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return $block_content;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -56,33 +159,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $used_layout = $default_layout;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        $id           = uniqid();
-       $content_size = isset( $used_layout['contentSize'] ) ? $used_layout['contentSize'] : null;
-       $wide_size    = isset( $used_layout['wideSize'] ) ? $used_layout['wideSize'] : null;
-
-       $all_max_width_value  = $content_size ? $content_size : $wide_size;
-       $wide_max_width_value = $wide_size ? $wide_size : $content_size;
-
-       // Make sure there is a single CSS rule, and all tags are stripped for security.
-       $all_max_width_value  = safecss_filter_attr( explode( ';', $all_max_width_value )[0] );
-       $wide_max_width_value = safecss_filter_attr( explode( ';', $wide_max_width_value )[0] );
-
-       $style = '';
-       if ( $content_size || $wide_size ) {
-               $style  = ".wp-container-$id > * {";
-               $style .= 'max-width: ' . esc_html( $all_max_width_value ) . ';';
-               $style .= 'margin-left: auto !important;';
-               $style .= 'margin-right: auto !important;';
-               $style .= '}';
-
-               $style .= ".wp-container-$id > .alignwide { max-width: " . esc_html( $wide_max_width_value ) . ';}';
-
-               $style .= ".wp-container-$id .alignfull { max-width: none; }";
-       }
-
-       $style .= ".wp-container-$id .alignleft { float: left; margin-right: 2em; }";
-       $style .= ".wp-container-$id .alignright { float: right; margin-left: 2em; }";
-
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $id    = uniqid();
+       $style = wp_get_layout_style( ".wp-container-$id", $used_layout, $has_block_gap_support );
</ins><span class="cx" style="display: block; padding: 0 10px">         // This assumes the hook only applies to blocks with a single wrapper.
</span><span class="cx" style="display: block; padding: 0 10px">        // I think this is a reasonable limitation for that particular hook.
</span><span class="cx" style="display: block; padding: 0 10px">        $content = preg_replace(
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -92,7 +170,19 @@
</span><span class="cx" style="display: block; padding: 0 10px">                1
</span><span class="cx" style="display: block; padding: 0 10px">        );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        return $content . '<style>' . $style . '</style>';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ /*
+        * Ideally styles should be loaded in the head, but blocks may be parsed
+        * after that, so loading in the footer for now.
+        * See https://core.trac.wordpress.org/ticket/53494.
+        */
+       add_action(
+               'wp_footer',
+               static function () use ( $style ) {
+                       echo '<style>' . $style . '</style>';
+               }
+       );
+
+       return $content;
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> // Register the block support.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -123,7 +213,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">        if (
</span><span class="cx" style="display: block; padding: 0 10px">                'core/group' !== $block['blockName'] ||
</span><span class="cx" style="display: block; padding: 0 10px">                WP_Theme_JSON_Resolver::theme_has_support() ||
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                1 === preg_match( $group_with_inner_container_regex, $block_content )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         1 === preg_match( $group_with_inner_container_regex, $block_content ) ||
+               ( isset( $block['attrs']['layout']['type'] ) && 'default' !== $block['attrs']['layout']['type'] )
</ins><span class="cx" style="display: block; padding: 0 10px">         ) {
</span><span class="cx" style="display: block; padding: 0 10px">                return $block_content;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span></span></pre></div>
<a id="trunksrcwpincludesblocksupportsspacingphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/block-supports/spacing.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-supports/spacing.php  2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-supports/spacing.php    2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,6 +1,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> <?php
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px">  * Spacing block support flag.
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+ * For backwards compatibility, this remains separate to the dimensions.php
+ * block support despite both belonging under a single panel in the editor.
</ins><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * @package WordPress
</span><span class="cx" style="display: block; padding: 0 10px">  * @since 5.8.0
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -42,25 +45,33 @@
</span><span class="cx" style="display: block; padding: 0 10px">  * @return array Block spacing CSS classes and inline styles.
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> function wp_apply_spacing_support( $block_type, $block_attributes ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        $has_padding_support = wp_has_spacing_feature_support( $block_type, 'padding' );
-       $has_margin_support  = wp_has_spacing_feature_support( $block_type, 'margin' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( wp_skip_spacing_serialization( $block_type ) ) {
+               return array();
+       }
+
+       $has_padding_support = block_has_support( $block_type, array( 'spacing', 'padding' ), false );
+       $has_margin_support  = block_has_support( $block_type, array( 'spacing', 'margin' ), false );
</ins><span class="cx" style="display: block; padding: 0 10px">         $styles              = array();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        if ( $has_padding_support ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $padding_value = _wp_array_get( $block_attributes, array( 'style', 'spacing', 'padding' ), null );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( null !== $padding_value ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if ( is_array( $padding_value ) ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         foreach ( $padding_value as $key => $value ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                $styles[] = sprintf( 'padding-%s: %s;', $key, $value );
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                } elseif ( null !== $padding_value ) {
+                       $styles[] = sprintf( 'padding: %s;', $padding_value );
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        if ( $has_margin_support ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $margin_value = _wp_array_get( $block_attributes, array( 'style', 'spacing', 'margin' ), null );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( null !== $margin_value ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if ( is_array( $margin_value ) ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         foreach ( $margin_value as $key => $value ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                $styles[] = sprintf( 'margin-%s: %s;', $key, $value );
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                } elseif ( null !== $margin_value ) {
+                       $styles[] = sprintf( 'margin: %s;', $margin_value );
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -68,22 +79,77 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * Checks whether the current block type supports the spacing feature requested.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * Checks whether serialization of the current block's spacing properties should
+ * occur.
</ins><span class="cx" style="display: block; padding: 0 10px">  *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @since 5.8.0
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @since 5.9.0
</ins><span class="cx" style="display: block; padding: 0 10px">  * @access private
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @param WP_Block_Type $block_type Block type to check for support.
- * @param string        $feature    Name of the feature to check support for.
- * @param mixed         $default    Fallback value for feature support. Default false.
- * @return bool Whether the feature is supported.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @param WP_Block_Type $block_type Block type.
+ *
+ * @return boolean Whether to serialize spacing support styles & classes.
</ins><span class="cx" style="display: block; padding: 0 10px">  */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-function wp_has_spacing_feature_support( $block_type, $feature, $default = false ) {
-       // Check if the specific feature has been opted into individually
-       // via nested flag under `spacing`.
-       return block_has_support( $block_type, array( 'spacing', $feature ), $default );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+function wp_skip_spacing_serialization( $block_type ) {
+       $spacing_support = _wp_array_get( $block_type->supports, array( 'spacing' ), false );
+
+       return is_array( $spacing_support ) &&
+               array_key_exists( '__experimentalSkipSerialization', $spacing_support ) &&
+               $spacing_support['__experimentalSkipSerialization'];
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/**
+ * Renders the spacing gap support to the block wrapper, to ensure
+ * that the CSS variable is rendered in all environments.
+ *
+ * @since 5.9.0
+ * @access private
+ *
+ * @param  string $block_content Rendered block content.
+ * @param  array  $block         Block object.
+ * @return string                Filtered block content.
+ */
+function wp_render_spacing_gap_support( $block_content, $block ) {
+       $block_type      = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
+       $has_gap_support = block_has_support( $block_type, array( 'spacing', 'blockGap' ), false );
+       if ( ! $has_gap_support || ! isset( $block['attrs']['style']['spacing']['blockGap'] ) ) {
+               return $block_content;
+       }
+
+       $gap_value = $block['attrs']['style']['spacing']['blockGap'];
+
+       // Skip if gap value contains unsupported characters.
+       // Regex for CSS value borrowed from `safecss_filter_attr`, and used here
+       // because we only want to match against the value, not the CSS attribute.
+       if ( preg_match( '%[\\\(&=}]|/\*%', $gap_value ) ) {
+               return $block_content;
+       }
+
+       $style = sprintf(
+               '--wp--style--block-gap: %s',
+               esc_attr( $gap_value )
+       );
+
+       // Attempt to update an existing style attribute on the wrapper element.
+       $injected_style = preg_replace(
+               '/^([^>.]+?)(' . preg_quote( 'style="', '/' ) . ')(?=.+?>)/',
+               '$1$2' . $style . '; ',
+               $block_content,
+               1
+       );
+
+       // If there is no existing style attribute, add one to the wrapper element.
+       if ( $injected_style === $block_content ) {
+               $injected_style = preg_replace(
+                       '/<([a-zA-Z0-9]+)([ >])/',
+                       '<$1 style="' . $style . '"$2',
+                       $block_content,
+                       1
+               );
+       };
+
+       return $injected_style;
+}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> // Register the block support.
</span><span class="cx" style="display: block; padding: 0 10px"> WP_Block_Supports::get_instance()->register(
</span><span class="cx" style="display: block; padding: 0 10px">        'spacing',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -92,3 +158,5 @@
</span><span class="cx" style="display: block; padding: 0 10px">                'apply'              => 'wp_apply_spacing_support',
</span><span class="cx" style="display: block; padding: 0 10px">        )
</span><span class="cx" style="display: block; padding: 0 10px"> );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+add_filter( 'render_block', 'wp_render_spacing_gap_support', 10, 2 );
</ins></span></pre></div>
<a id="trunksrcwpincludesblocksupportstypographyphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/block-supports/typography.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/block-supports/typography.php       2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/block-supports/typography.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -28,6 +28,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        $has_font_size_support       = _wp_array_get( $typography_supports, array( 'fontSize' ), false );
</span><span class="cx" style="display: block; padding: 0 10px">        $has_font_style_support      = _wp_array_get( $typography_supports, array( '__experimentalFontStyle' ), false );
</span><span class="cx" style="display: block; padding: 0 10px">        $has_font_weight_support     = _wp_array_get( $typography_supports, array( '__experimentalFontWeight' ), false );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        $has_letter_spacing_support  = _wp_array_get( $typography_supports, array( '__experimentalLetterSpacing' ), false );
</ins><span class="cx" style="display: block; padding: 0 10px">         $has_line_height_support     = _wp_array_get( $typography_supports, array( 'lineHeight' ), false );
</span><span class="cx" style="display: block; padding: 0 10px">        $has_text_decoration_support = _wp_array_get( $typography_supports, array( '__experimentalTextDecoration' ), false );
</span><span class="cx" style="display: block; padding: 0 10px">        $has_text_transform_support  = _wp_array_get( $typography_supports, array( '__experimentalTextTransform' ), false );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -36,6 +37,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                || $has_font_size_support
</span><span class="cx" style="display: block; padding: 0 10px">                || $has_font_style_support
</span><span class="cx" style="display: block; padding: 0 10px">                || $has_font_weight_support
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                || $has_letter_spacing_support
</ins><span class="cx" style="display: block; padding: 0 10px">                 || $has_line_height_support
</span><span class="cx" style="display: block; padding: 0 10px">                || $has_text_decoration_support
</span><span class="cx" style="display: block; padding: 0 10px">                || $has_text_transform_support;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -93,6 +95,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        $has_font_size_support       = _wp_array_get( $typography_supports, array( 'fontSize' ), false );
</span><span class="cx" style="display: block; padding: 0 10px">        $has_font_style_support      = _wp_array_get( $typography_supports, array( '__experimentalFontStyle' ), false );
</span><span class="cx" style="display: block; padding: 0 10px">        $has_font_weight_support     = _wp_array_get( $typography_supports, array( '__experimentalFontWeight' ), false );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        $has_letter_spacing_support  = _wp_array_get( $typography_supports, array( '__experimentalLetterSpacing' ), false );
</ins><span class="cx" style="display: block; padding: 0 10px">         $has_line_height_support     = _wp_array_get( $typography_supports, array( 'lineHeight' ), false );
</span><span class="cx" style="display: block; padding: 0 10px">        $has_text_decoration_support = _wp_array_get( $typography_supports, array( '__experimentalTextDecoration' ), false );
</span><span class="cx" style="display: block; padding: 0 10px">        $has_text_transform_support  = _wp_array_get( $typography_supports, array( '__experimentalTextTransform' ), false );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -102,7 +105,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $has_custom_font_size = isset( $block_attributes['style']['typography']['fontSize'] );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if ( $has_named_font_size ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $classes[] = sprintf( 'has-%s-font-size', $block_attributes['fontSize'] );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 $classes[] = sprintf( 'has-%s-font-size', _wp_to_kebab_case( $block_attributes['fontSize'] ) );
</ins><span class="cx" style="display: block; padding: 0 10px">                 } elseif ( $has_custom_font_size ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $styles[] = sprintf( 'font-size: %s;', $block_attributes['style']['typography']['fontSize'] );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -109,17 +112,21 @@
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        if ( $has_font_family_support ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $has_font_family = isset( $block_attributes['style']['typography']['fontFamily'] );
-               if ( $has_font_family ) {
-                       $font_family = $block_attributes['style']['typography']['fontFamily'];
-                       if ( strpos( $font_family, 'var:preset|font-family' ) !== false ) {
-                               // Get the name from the string and add proper styles.
-                               $index_to_splice  = strrpos( $font_family, '|' ) + 1;
-                               $font_family_name = substr( $font_family, $index_to_splice );
-                               $styles[]         = sprintf( 'font-family: var(--wp--preset--font-family--%s);', $font_family_name );
-                       } else {
-                               $styles[] = sprintf( 'font-family: %s;', $block_attributes['style']['typography']['fontFamily'] );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $has_named_font_family  = array_key_exists( 'fontFamily', $block_attributes );
+               $has_custom_font_family = isset( $block_attributes['style']['typography']['fontFamily'] );
+
+               if ( $has_named_font_family ) {
+                       $classes[] = sprintf( 'has-%s-font-family', _wp_to_kebab_case( $block_attributes['fontFamily'] ) );
+               } elseif ( $has_custom_font_family ) {
+                       // Before using classes, the value was serialized as a CSS Custom Property.
+                       // We don't need this code path when it lands in core.
+                       $font_family_custom = $block_attributes['style']['typography']['fontFamily'];
+                       if ( strpos( $font_family_custom, 'var:preset|font-family' ) !== false ) {
+                               $index_to_splice    = strrpos( $font_family_custom, '|' ) + 1;
+                               $font_family_slug   = _wp_to_kebab_case( substr( $font_family_custom, $index_to_splice ) );
+                               $font_family_custom = sprintf( 'var(--wp--preset--font-family--%s)', $font_family_slug );
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        $styles[] = sprintf( 'font-family: %s;', $font_family_custom );
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -158,6 +165,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        if ( $has_letter_spacing_support ) {
+               $letter_spacing_style = wp_typography_get_css_variable_inline_style( $block_attributes, 'letterSpacing', 'letter-spacing' );
+               if ( $letter_spacing_style ) {
+                       $styles[] = $letter_spacing_style;
+               }
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         if ( ! empty( $classes ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                $attributes['class'] = implode( ' ', $classes );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span></span></pre></div>
<a id="trunksrcwpincludesblocksindexphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/blocks/index.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/index.php    2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/blocks/index.php      2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -15,29 +15,38 @@
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/latest-posts.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/legacy-widget.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/loginout.php';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+require ABSPATH . WPINC . '/blocks/navigation-area.php';
+require ABSPATH . WPINC . '/blocks/navigation-link.php';
+require ABSPATH . WPINC . '/blocks/navigation-submenu.php';
+require ABSPATH . WPINC . '/blocks/navigation.php';
</ins><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/page-list.php';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+require ABSPATH . WPINC . '/blocks/pattern.php';
+require ABSPATH . WPINC . '/blocks/post-author.php';
+require ABSPATH . WPINC . '/blocks/post-comments.php';
</ins><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/post-content.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/post-date.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/post-excerpt.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/post-featured-image.php';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+require ABSPATH . WPINC . '/blocks/post-navigation-link.php';
+require ABSPATH . WPINC . '/blocks/post-template.php';
</ins><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/post-terms.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/post-title.php';
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-require ABSPATH . WPINC . '/blocks/post-template.php';
-require ABSPATH . WPINC . '/blocks/query.php';
-require ABSPATH . WPINC . '/blocks/query-pagination.php';
</del><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/query-pagination-next.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/query-pagination-numbers.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/query-pagination-previous.php';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+require ABSPATH . WPINC . '/blocks/query-pagination.php';
</ins><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/query-title.php';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+require ABSPATH . WPINC . '/blocks/query.php';
</ins><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/rss.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/search.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/shortcode.php';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+require ABSPATH . WPINC . '/blocks/site-logo.php';
</ins><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/site-tagline.php';
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-require ABSPATH . WPINC . '/blocks/site-logo.php';
</del><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/site-title.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/social-link.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/tag-cloud.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/blocks/template-part.php';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+require ABSPATH . WPINC . '/blocks/term-description.php';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px">  * Registers core block types using metadata files.
</span></span></pre></div>
<a id="trunksrcwpincludesblocksnavigationblockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation/block.json                                (rev 0)
+++ trunk/src/wp-includes/blocks/navigation/block.json  2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,124 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+       "apiVersion": 2,
+       "name": "core/navigation",
+       "title": "Navigation",
+       "category": "theme",
+       "description": "A collection of blocks that allow visitors to get around your site.",
+       "keywords": [
+               "menu",
+               "navigation",
+               "links"
+       ],
+       "textdomain": "default",
+       "attributes": {
+               "navigationMenuId": {
+                       "type": "number"
+               },
+               "textColor": {
+                       "type": "string"
+               },
+               "customTextColor": {
+                       "type": "string"
+               },
+               "rgbTextColor": {
+                       "type": "string"
+               },
+               "backgroundColor": {
+                       "type": "string"
+               },
+               "customBackgroundColor": {
+                       "type": "string"
+               },
+               "rgbBackgroundColor": {
+                       "type": "string"
+               },
+               "showSubmenuIcon": {
+                       "type": "boolean",
+                       "default": true
+               },
+               "openSubmenusOnClick": {
+                       "type": "boolean",
+                       "default": false
+               },
+               "overlayMenu": {
+                       "type": "string",
+                       "default": "mobile"
+               },
+               "__unstableLocation": {
+                       "type": "string"
+               },
+               "overlayBackgroundColor": {
+                       "type": "string"
+               },
+               "customOverlayBackgroundColor": {
+                       "type": "string"
+               },
+               "overlayTextColor": {
+                       "type": "string"
+               },
+               "customOverlayTextColor": {
+                       "type": "string"
+               }
+       },
+       "usesContext": [ "navigationArea" ],
+       "providesContext": {
+               "textColor": "textColor",
+               "customTextColor": "customTextColor",
+               "backgroundColor": "backgroundColor",
+               "customBackgroundColor": "customBackgroundColor",
+               "overlayTextColor": "overlayTextColor",
+               "customOverlayTextColor": "customOverlayTextColor",
+               "overlayBackgroundColor": "overlayBackgroundColor",
+               "customOverlayBackgroundColor": "customOverlayBackgroundColor",
+               "fontSize": "fontSize",
+               "customFontSize": "customFontSize",
+               "showSubmenuIcon": "showSubmenuIcon",
+               "openSubmenusOnClick": "openSubmenusOnClick",
+               "style": "style",
+               "orientation": "orientation"
+       },
+       "supports": {
+               "align": [
+                       "wide",
+                       "full"
+               ],
+               "anchor": true,
+               "html": false,
+               "inserter": true,
+               "typography": {
+                       "fontSize": true,
+                       "lineHeight": true,
+                       "__experimentalFontStyle": true,
+                       "__experimentalFontWeight": true,
+                       "__experimentalTextTransform": true,
+                       "__experimentalFontFamily": true,
+                       "__experimentalTextDecoration": true,
+                       "__experimentalDefaultControls": {
+                               "fontSize": true
+                       }
+               },
+               "spacing": {
+                       "blockGap": true,
+                       "units": [
+                               "px",
+                               "em",
+                               "rem",
+                               "vh",
+                               "vw"
+                       ],
+                       "__experimentalDefaultControls": {
+                               "blockGap": true
+                       }
+               },
+               "__experimentalLayout": {
+                       "allowSwitching": false,
+                       "allowInheriting": false,
+                       "default": {
+                               "type": "flex"
+                       }
+               }
+       },
+       "viewScript": "file:./view.min.js",
+       "editorStyle": "wp-block-navigation-editor",
+       "style": "wp-block-navigation"
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksnavigationviewassetphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation/view.asset.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation/view.asset.php                            (rev 0)
+++ trunk/src/wp-includes/blocks/navigation/view.asset.php      2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php return array('dependencies' => array(), 'version' => '86538493346805d860c94eb70dd1323d');
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation/view.asset.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksnavigationviewminassetphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation/view.min.asset.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation/view.min.asset.php                                (rev 0)
+++ trunk/src/wp-includes/blocks/navigation/view.min.asset.php  2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php return array('dependencies' => array(), 'version' => '7b2c5174a07c417dc3db6f1d9a9c3f78');
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation/view.min.asset.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksnavigationareablockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation-area/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation-area/block.json                           (rev 0)
+++ trunk/src/wp-includes/blocks/navigation-area/block.json     2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,27 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+       "apiVersion": 2,
+       "name": "core/navigation-area",
+       "title": "Navigation Area",
+       "category": "theme",
+       "description": "Define a navigation area for your theme. The navigation block associated with this area will be automatically displayed.",
+       "keywords": [
+               "menu",
+               "navigation",
+               "links",
+               "location"
+       ],
+       "textdomain": "default",
+       "attributes": {
+               "area": {
+                       "type": "string",
+                       "default": "primary"
+               }
+       },
+       "providesContext": {
+               "navigationArea": "area"
+       },
+       "supports": {
+               "html": false,
+               "inserter": true
+       }
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation-area/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksnavigationareaphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation-area.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation-area.php                          (rev 0)
+++ trunk/src/wp-includes/blocks/navigation-area.php    2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,21 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/navigation-area` block.
+ *
+ * @package gutenberg
+ */
+
+/**
+ * Registers the `core/navigation-area` block on the server.
+ */
+function register_block_core_navigation_area() {
+       register_block_type_from_metadata(
+               __DIR__ . '/navigation-area',
+               array(
+                       'provides_context' => array(
+                               'navigationArea' => 'area',
+                       ),
+               )
+       );
+}
+add_action( 'init', 'register_block_core_navigation_area' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation-area.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksnavigationlinkblockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation-link/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation-link/block.json                           (rev 0)
+++ trunk/src/wp-includes/blocks/navigation-link/block.json     2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,65 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+       "apiVersion": 2,
+       "name": "core/navigation-link",
+       "title": "Custom Link",
+       "category": "design",
+       "parent": [
+               "core/navigation"
+       ],
+       "description": "Add a page, link, or another item to your navigation.",
+       "textdomain": "default",
+       "attributes": {
+               "label": {
+                       "type": "string"
+               },
+               "type": {
+                       "type": "string"
+               },
+               "description": {
+                       "type": "string"
+               },
+               "rel": {
+                       "type": "string"
+               },
+               "id": {
+                       "type": "number"
+               },
+               "opensInNewTab": {
+                       "type": "boolean",
+                       "default": false
+               },
+               "url": {
+                       "type": "string"
+               },
+               "title": {
+                       "type": "string"
+               },
+               "kind": {
+                       "type": "string"
+               },
+               "isTopLevelLink": {
+                       "type": "boolean"
+               }
+       },
+       "usesContext": [
+               "textColor",
+               "customTextColor",
+               "backgroundColor",
+               "customBackgroundColor",
+               "overlayTextColor",
+               "customOverlayTextColor",
+               "overlayBackgroundColor",
+               "customOverlayBackgroundColor",
+               "fontSize",
+               "customFontSize",
+               "showSubmenuIcon",
+               "style"
+       ],
+       "supports": {
+               "reusable": false,
+               "html": false,
+               "__experimentalSlashInserter": true
+       },
+       "editorStyle": "wp-block-navigation-link-editor",
+       "style": "wp-block-navigation-link"
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation-link/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksnavigationlinkphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation-link.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation-link.php                          (rev 0)
+++ trunk/src/wp-includes/blocks/navigation-link.php    2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,350 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/navigation-link` block.
+ *
+ * @package gutenberg
+ */
+
+/**
+ * Build an array with CSS classes and inline styles defining the colors
+ * which will be applied to the navigation markup in the front-end.
+ *
+ * @param  array $context    Navigation block context.
+ * @param  array $attributes Block attributes.
+ * @return array Colors CSS classes and inline styles.
+ */
+function block_core_navigation_link_build_css_colors( $context, $attributes ) {
+       $colors = array(
+               'css_classes'   => array(),
+               'inline_styles' => '',
+       );
+
+       $is_sub_menu = isset( $attributes['isTopLevelLink'] ) ? ( ! $attributes['isTopLevelLink'] ) : false;
+
+       // Text color.
+       $named_text_color  = null;
+       $custom_text_color = null;
+
+       if ( $is_sub_menu && array_key_exists( 'customOverlayTextColor', $context ) ) {
+               $custom_text_color = $context['customOverlayTextColor'];
+       } elseif ( $is_sub_menu && array_key_exists( 'overlayTextColor', $context ) ) {
+               $named_text_color = $context['overlayTextColor'];
+       } elseif ( array_key_exists( 'customTextColor', $context ) ) {
+               $custom_text_color = $context['customTextColor'];
+       } elseif ( array_key_exists( 'textColor', $context ) ) {
+               $named_text_color = $context['textColor'];
+       } elseif ( isset( $context['style']['color']['text'] ) ) {
+               $custom_text_color = $context['style']['color']['text'];
+       }
+
+       // If has text color.
+       if ( ! is_null( $named_text_color ) ) {
+               // Add the color class.
+               array_push( $colors['css_classes'], 'has-text-color', sprintf( 'has-%s-color', $named_text_color ) );
+       } elseif ( ! is_null( $custom_text_color ) ) {
+               // Add the custom color inline style.
+               $colors['css_classes'][]  = 'has-text-color';
+               $colors['inline_styles'] .= sprintf( 'color: %s;', $custom_text_color );
+       }
+
+       // Background color.
+       $named_background_color  = null;
+       $custom_background_color = null;
+
+       if ( $is_sub_menu && array_key_exists( 'customOverlayBackgroundColor', $context ) ) {
+               $custom_background_color = $context['customOverlayBackgroundColor'];
+       } elseif ( $is_sub_menu && array_key_exists( 'overlayBackgroundColor', $context ) ) {
+               $named_background_color = $context['overlayBackgroundColor'];
+       } elseif ( array_key_exists( 'customBackgroundColor', $context ) ) {
+               $custom_background_color = $context['customBackgroundColor'];
+       } elseif ( array_key_exists( 'backgroundColor', $context ) ) {
+               $named_background_color = $context['backgroundColor'];
+       } elseif ( isset( $context['style']['color']['background'] ) ) {
+               $custom_background_color = $context['style']['color']['background'];
+       }
+
+       // If has background color.
+       if ( ! is_null( $named_background_color ) ) {
+               // Add the background-color class.
+               array_push( $colors['css_classes'], 'has-background', sprintf( 'has-%s-background-color', $named_background_color ) );
+       } elseif ( ! is_null( $custom_background_color ) ) {
+               // Add the custom background-color inline style.
+               $colors['css_classes'][]  = 'has-background';
+               $colors['inline_styles'] .= sprintf( 'background-color: %s;', $custom_background_color );
+       }
+
+       return $colors;
+}
+
+/**
+ * Build an array with CSS classes and inline styles defining the font sizes
+ * which will be applied to the navigation markup in the front-end.
+ *
+ * @param  array $context Navigation block context.
+ * @return array Font size CSS classes and inline styles.
+ */
+function block_core_navigation_link_build_css_font_sizes( $context ) {
+       // CSS classes.
+       $font_sizes = array(
+               'css_classes'   => array(),
+               'inline_styles' => '',
+       );
+
+       $has_named_font_size  = array_key_exists( 'fontSize', $context );
+       $has_custom_font_size = isset( $context['style']['typography']['fontSize'] );
+
+       if ( $has_named_font_size ) {
+               // Add the font size class.
+               $font_sizes['css_classes'][] = sprintf( 'has-%s-font-size', $context['fontSize'] );
+       } elseif ( $has_custom_font_size ) {
+               // Add the custom font size inline style.
+               $font_sizes['inline_styles'] = sprintf( 'font-size: %spx;', $context['style']['typography']['fontSize'] );
+       }
+
+       return $font_sizes;
+}
+
+/**
+ * Returns the top-level submenu SVG chevron icon.
+ *
+ * @return string
+ */
+function block_core_navigation_link_render_submenu_icon() {
+       return '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" role="img" aria-hidden="true" focusable="false"><path d="M1.50002 4L6.00002 8L10.5 4" stroke-width="1.5"></path></svg>';
+}
+
+/**
+ * Renders the `core/navigation-link` block.
+ *
+ * @param array $attributes The block attributes.
+ * @param array $content The saved content.
+ * @param array $block The parsed block.
+ *
+ * @return string Returns the post content with the legacy widget added.
+ */
+function render_block_core_navigation_link( $attributes, $content, $block ) {
+       $navigation_link_has_id = isset( $attributes['id'] ) && is_numeric( $attributes['id'] );
+       $is_post_type           = isset( $attributes['kind'] ) && 'post-type' === $attributes['kind'];
+       $is_post_type           = $is_post_type || isset( $attributes['type'] ) && ( 'post' === $attributes['type'] || 'page' === $attributes['type'] );
+
+       // Don't render the block's subtree if it is a draft or if the ID does not exist.
+       if ( $is_post_type && $navigation_link_has_id ) {
+               $post = get_post( $attributes['id'] );
+               if ( ! $post || 'publish' !== $post->post_status ) {
+                       return '';
+               }
+       }
+
+       // Don't render the block's subtree if it has no label.
+       if ( empty( $attributes['label'] ) ) {
+               return '';
+       }
+
+       $colors          = block_core_navigation_link_build_css_colors( $block->context, $attributes );
+       $font_sizes      = block_core_navigation_link_build_css_font_sizes( $block->context );
+       $classes         = array_merge(
+               $colors['css_classes'],
+               $font_sizes['css_classes']
+       );
+       $style_attribute = ( $colors['inline_styles'] . $font_sizes['inline_styles'] );
+
+       $css_classes = trim( implode( ' ', $classes ) );
+       $has_submenu = count( $block->inner_blocks ) > 0;
+       $is_active   = ! empty( $attributes['id'] ) && ( get_the_ID() === $attributes['id'] );
+
+       $wrapper_attributes = get_block_wrapper_attributes(
+               array(
+                       'class' => $css_classes . ' wp-block-navigation-item' . ( $has_submenu ? ' has-child' : '' ) .
+                               ( $is_active ? ' current-menu-item' : '' ),
+                       'style' => $style_attribute,
+               )
+       );
+       $html               = '<li ' . $wrapper_attributes . '>' .
+               '<a class="wp-block-navigation-item__content" ';
+
+       // Start appending HTML attributes to anchor tag.
+       if ( isset( $attributes['url'] ) ) {
+               $html .= ' href="' . esc_url( $attributes['url'] ) . '"';
+       }
+
+       if ( $is_active ) {
+               $html .= ' aria-current="page"';
+       }
+
+       if ( isset( $attributes['opensInNewTab'] ) && true === $attributes['opensInNewTab'] ) {
+               $html .= ' target="_blank"  ';
+       }
+
+       if ( isset( $attributes['rel'] ) ) {
+               $html .= ' rel="' . esc_attr( $attributes['rel'] ) . '"';
+       } elseif ( isset( $attributes['nofollow'] ) && $attributes['nofollow'] ) {
+               $html .= ' rel="nofollow"';
+       }
+
+       if ( isset( $attributes['title'] ) ) {
+               $html .= ' title="' . esc_attr( $attributes['title'] ) . '"';
+       }
+
+       // End appending HTML attributes to anchor tag.
+
+       // Start anchor tag content.
+       $html .= '>' .
+               // Wrap title with span to isolate it from submenu icon.
+               '<span class="wp-block-navigation-item__label">';
+
+       if ( isset( $attributes['label'] ) ) {
+               $html .= wp_kses(
+                       $attributes['label'],
+                       array(
+                               'code'   => array(),
+                               'em'     => array(),
+                               'img'    => array(
+                                       'scale' => array(),
+                                       'class' => array(),
+                                       'style' => array(),
+                                       'src'   => array(),
+                                       'alt'   => array(),
+                               ),
+                               's'      => array(),
+                               'span'   => array(
+                                       'style' => array(),
+                               ),
+                               'strong' => array(),
+                       )
+               );
+       }
+
+       $html .= '</span>';
+
+       if ( isset( $block->context['showSubmenuIcon'] ) && $block->context['showSubmenuIcon'] && $has_submenu ) {
+               // The submenu icon can be hidden by a CSS rule on the Navigation Block.
+               $html .= '<span class="wp-block-navigation__submenu-icon">' . block_core_navigation_link_render_submenu_icon() . '</span>';
+       }
+
+       $html .= '</a>';
+       // End anchor tag content.
+
+       if ( $has_submenu ) {
+               $inner_blocks_html = '';
+               foreach ( $block->inner_blocks as $inner_block ) {
+                       $inner_blocks_html .= $inner_block->render();
+               }
+
+               $html .= sprintf(
+                       '<ul class="wp-block-navigation__submenu-container">%s</ul>',
+                       $inner_blocks_html
+               );
+       }
+
+       $html .= '</li>';
+
+       return $html;
+}
+
+/**
+ * Returns a navigation link variation
+ *
+ * @param WP_Taxonomy|WP_Post_Type $entity post type or taxonomy entity.
+ * @param string                   $kind string of value 'taxonomy' or 'post-type'.
+ *
+ * @return array
+ */
+function build_variation_for_navigation_link( $entity, $kind ) {
+       $title       = '';
+       $description = '';
+
+       if ( property_exists( $entity->labels, 'item_link' ) ) {
+               $title = $entity->labels->item_link;
+       }
+       if ( property_exists( $entity->labels, 'item_link_description' ) ) {
+               $description = $entity->labels->item_link_description;
+       }
+
+       $variation = array(
+               'name'        => $entity->name,
+               'title'       => $title,
+               'description' => $description,
+               'attributes'  => array(
+                       'type' => $entity->name,
+                       'kind' => $kind,
+               ),
+       );
+
+       // Tweak some value for the variations.
+       $variation_overrides = array(
+               'post_tag'    => array(
+                       'name'       => 'tag',
+                       'attributes' => array(
+                               'type' => 'tag',
+                               'kind' => $kind,
+                       ),
+               ),
+               'post_format' => array(
+                       // The item_link and item_link_description for post formats is the
+                       // same as for tags, so need to be overridden.
+                       'title'       => __( 'Post Format Link' ),
+                       'description' => __( 'A link to a post format' ),
+                       'attributes'  => array(
+                               'type' => 'post_format',
+                               'kind' => $kind,
+                       ),
+               ),
+       );
+
+       if ( array_key_exists( $entity->name, $variation_overrides ) ) {
+               $variation = array_merge(
+                       $variation,
+                       $variation_overrides[ $entity->name ]
+               );
+       }
+
+       return $variation;
+}
+
+/**
+ * Register the navigation link block.
+ *
+ * @uses render_block_core_navigation()
+ * @throws WP_Error An WP_Error exception parsing the block definition.
+ */
+function register_block_core_navigation_link() {
+       $post_types = get_post_types( array( 'show_in_nav_menus' => true ), 'objects' );
+       $taxonomies = get_taxonomies( array( 'show_in_nav_menus' => true ), 'objects' );
+
+       // Use two separate arrays as a way to order the variations in the UI.
+       // Known variations (like Post Link and Page Link) are added to the
+       // `built_ins` array. Variations for custom post types and taxonomies are
+       // added to the `variations` array and will always appear after `built-ins.
+       $built_ins  = array();
+       $variations = array();
+
+       if ( $post_types ) {
+               foreach ( $post_types as $post_type ) {
+                       $variation = build_variation_for_navigation_link( $post_type, 'post-type' );
+                       if ( $post_type->_builtin ) {
+                               $built_ins[] = $variation;
+                       } else {
+                               $variations[] = $variation;
+                       }
+               }
+       }
+       if ( $taxonomies ) {
+               foreach ( $taxonomies as $taxonomy ) {
+                       $variation = build_variation_for_navigation_link( $taxonomy, 'taxonomy' );
+                       if ( $taxonomy->_builtin ) {
+                               $built_ins[] = $variation;
+                       } else {
+                               $variations[] = $variation;
+                       }
+               }
+       }
+
+       register_block_type_from_metadata(
+               __DIR__ . '/navigation-link',
+               array(
+                       'render_callback' => 'render_block_core_navigation_link',
+                       'variations'      => array_merge( $built_ins, $variations ),
+               )
+       );
+}
+add_action( 'init', 'register_block_core_navigation_link' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation-link.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksnavigationsubmenublockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation-submenu/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation-submenu/block.json                                (rev 0)
+++ trunk/src/wp-includes/blocks/navigation-submenu/block.json  2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,65 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+       "apiVersion": 2,
+       "name": "core/navigation-submenu",
+       "title": "Submenu",
+       "category": "design",
+       "parent": [
+               "core/navigation"
+       ],
+       "description": "Add a submenu to your navigation.",
+       "textdomain": "default",
+       "attributes": {
+               "label": {
+                       "type": "string"
+               },
+               "type": {
+                       "type": "string"
+               },
+               "description": {
+                       "type": "string"
+               },
+               "rel": {
+                       "type": "string"
+               },
+               "id": {
+                       "type": "number"
+               },
+               "opensInNewTab": {
+                       "type": "boolean",
+                       "default": false
+               },
+               "url": {
+                       "type": "string"
+               },
+               "title": {
+                       "type": "string"
+               },
+               "kind": {
+                       "type": "string"
+               },
+               "isTopLevelItem": {
+                       "type": "boolean"
+               }
+       },
+       "usesContext": [
+               "textColor",
+               "customTextColor",
+               "backgroundColor",
+               "customBackgroundColor",
+               "overlayTextColor",
+               "customOverlayTextColor",
+               "overlayBackgroundColor",
+               "customOverlayBackgroundColor",
+               "fontSize",
+               "customFontSize",
+               "showSubmenuIcon",
+               "openSubmenusOnClick",
+               "style"
+       ],
+       "supports": {
+               "reusable": false,
+               "html": false
+       },
+       "editorStyle": "wp-block-navigation-submenu-editor",
+       "style": "wp-block-navigation-submenu"
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation-submenu/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksnavigationsubmenuphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation-submenu.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation-submenu.php                               (rev 0)
+++ trunk/src/wp-includes/blocks/navigation-submenu.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,300 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/navigation-submenu` block.
+ *
+ * @package gutenberg
+ */
+
+/**
+ * Build an array with CSS classes and inline styles defining the colors
+ * which will be applied to the navigation markup in the front-end.
+ *
+ * @param  array $context    Navigation block context.
+ * @param  array $attributes Block attributes.
+ * @return array Colors CSS classes and inline styles.
+ */
+function block_core_navigation_submenu_build_css_colors( $context, $attributes ) {
+       $colors = array(
+               'css_classes'   => array(),
+               'inline_styles' => '',
+       );
+
+       $is_sub_menu = isset( $attributes['isTopLevelLink'] ) ? ( ! $attributes['isTopLevelLink'] ) : false;
+
+       // Text color.
+       $named_text_color  = null;
+       $custom_text_color = null;
+
+       if ( $is_sub_menu && array_key_exists( 'customOverlayTextColor', $context ) ) {
+               $custom_text_color = $context['customOverlayTextColor'];
+       } elseif ( $is_sub_menu && array_key_exists( 'overlayTextColor', $context ) ) {
+               $named_text_color = $context['overlayTextColor'];
+       } elseif ( array_key_exists( 'customTextColor', $context ) ) {
+               $custom_text_color = $context['customTextColor'];
+       } elseif ( array_key_exists( 'textColor', $context ) ) {
+               $named_text_color = $context['textColor'];
+       } elseif ( isset( $context['style']['color']['text'] ) ) {
+               $custom_text_color = $context['style']['color']['text'];
+       }
+
+       // If has text color.
+       if ( ! is_null( $named_text_color ) ) {
+               // Add the color class.
+               array_push( $colors['css_classes'], 'has-text-color', sprintf( 'has-%s-color', $named_text_color ) );
+       } elseif ( ! is_null( $custom_text_color ) ) {
+               // Add the custom color inline style.
+               $colors['css_classes'][]  = 'has-text-color';
+               $colors['inline_styles'] .= sprintf( 'color: %s;', $custom_text_color );
+       }
+
+       // Background color.
+       $named_background_color  = null;
+       $custom_background_color = null;
+
+       if ( $is_sub_menu && array_key_exists( 'customOverlayBackgroundColor', $context ) ) {
+               $custom_background_color = $context['customOverlayBackgroundColor'];
+       } elseif ( $is_sub_menu && array_key_exists( 'overlayBackgroundColor', $context ) ) {
+               $named_background_color = $context['overlayBackgroundColor'];
+       } elseif ( array_key_exists( 'customBackgroundColor', $context ) ) {
+               $custom_background_color = $context['customBackgroundColor'];
+       } elseif ( array_key_exists( 'backgroundColor', $context ) ) {
+               $named_background_color = $context['backgroundColor'];
+       } elseif ( isset( $context['style']['color']['background'] ) ) {
+               $custom_background_color = $context['style']['color']['background'];
+       }
+
+       // If has background color.
+       if ( ! is_null( $named_background_color ) ) {
+               // Add the background-color class.
+               array_push( $colors['css_classes'], 'has-background', sprintf( 'has-%s-background-color', $named_background_color ) );
+       } elseif ( ! is_null( $custom_background_color ) ) {
+               // Add the custom background-color inline style.
+               $colors['css_classes'][]  = 'has-background';
+               $colors['inline_styles'] .= sprintf( 'background-color: %s;', $custom_background_color );
+       }
+
+       return $colors;
+}
+
+/**
+ * Build an array with CSS classes and inline styles defining the font sizes
+ * which will be applied to the navigation markup in the front-end.
+ *
+ * @param  array $context Navigation block context.
+ * @return array Font size CSS classes and inline styles.
+ */
+function block_core_navigation_submenu_build_css_font_sizes( $context ) {
+       // CSS classes.
+       $font_sizes = array(
+               'css_classes'   => array(),
+               'inline_styles' => '',
+       );
+
+       $has_named_font_size  = array_key_exists( 'fontSize', $context );
+       $has_custom_font_size = isset( $context['style']['typography']['fontSize'] );
+
+       if ( $has_named_font_size ) {
+               // Add the font size class.
+               $font_sizes['css_classes'][] = sprintf( 'has-%s-font-size', $context['fontSize'] );
+       } elseif ( $has_custom_font_size ) {
+               // Add the custom font size inline style.
+               $font_sizes['inline_styles'] = sprintf( 'font-size: %spx;', $context['style']['typography']['fontSize'] );
+       }
+
+       return $font_sizes;
+}
+
+/**
+ * Returns the top-level submenu SVG chevron icon.
+ *
+ * @return string
+ */
+function block_core_navigation_submenu_render_submenu_icon() {
+       return '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" role="img" aria-hidden="true" focusable="false"><path d="M1.50002 4L6.00002 8L10.5 4" stroke-width="1.5"></path></svg>';
+}
+
+/**
+ * Renders the `core/navigation-submenu` block.
+ *
+ * @param array  $attributes The block attributes.
+ * @param string $content The saved content.
+ * @param object $block The parsed block.
+ *
+ * @return string Returns the post content with the legacy widget added.
+ */
+function render_block_core_navigation_submenu( $attributes, $content, $block ) {
+
+       $navigation_link_has_id = isset( $attributes['id'] ) && is_numeric( $attributes['id'] );
+       $is_post_type           = isset( $attributes['kind'] ) && 'post-type' === $attributes['kind'];
+       $is_post_type           = $is_post_type || isset( $attributes['type'] ) && ( 'post' === $attributes['type'] || 'page' === $attributes['type'] );
+
+       // Don't render the block's subtree if it is a draft.
+       if ( $is_post_type && $navigation_link_has_id && 'publish' !== get_post_status( $attributes['id'] ) ) {
+               return '';
+       }
+
+       // Don't render the block's subtree if it has no label.
+       if ( empty( $attributes['label'] ) ) {
+               return '';
+       }
+
+       $colors          = block_core_navigation_submenu_build_css_colors( $block->context, $attributes );
+       $font_sizes      = block_core_navigation_submenu_build_css_font_sizes( $block->context );
+       $classes         = array_merge(
+               $colors['css_classes'],
+               $font_sizes['css_classes']
+       );
+       $style_attribute = ( $colors['inline_styles'] . $font_sizes['inline_styles'] );
+
+       $css_classes = trim( implode( ' ', $classes ) );
+       $has_submenu = count( $block->inner_blocks ) > 0;
+       $is_active   = ! empty( $attributes['id'] ) && ( get_the_ID() === $attributes['id'] );
+
+       $class_name = ! empty( $attributes['className'] ) ? implode( ' ', (array) $attributes['className'] ) : false;
+
+       if ( false !== $class_name ) {
+               $css_classes .= ' ' . $class_name;
+       }
+
+       $show_submenu_indicators = isset( $block->context['showSubmenuIcon'] ) && $block->context['showSubmenuIcon'];
+       $open_on_click           = isset( $block->context['openSubmenusOnClick'] ) && $block->context['openSubmenusOnClick'];
+       $open_on_hover_and_click = isset( $block->context['openSubmenusOnClick'] ) && ! $block->context['openSubmenusOnClick'] &&
+               $show_submenu_indicators;
+
+       $wrapper_attributes = get_block_wrapper_attributes(
+               array(
+                       'class' => $css_classes . ' wp-block-navigation-item' . ( $has_submenu ? ' has-child' : '' ) .
+                       ( $open_on_click ? ' open-on-click' : '' ) . ( $open_on_hover_and_click ? ' open-on-hover-click' : '' ) .
+                       ( $is_active ? ' current-menu-item' : '' ),
+                       'style' => $style_attribute,
+               )
+       );
+       $html               = '<li ' . $wrapper_attributes . '>';
+
+       // If Submenus open on hover, we render an anchor tag with attributes.
+       // If submenu icons are set to show, we also render a submenu button, so the submenu can be opened on click.
+       if ( ! $open_on_click ) {
+               $item_url = isset( $attributes['url'] ) ? esc_url( $attributes['url'] ) : '';
+               // Start appending HTML attributes to anchor tag.
+               $html .= '<a class="wp-block-navigation-item__content" href="' . $item_url . '"';
+
+               if ( $is_active ) {
+                       $html .= ' aria-current="page"';
+               }
+
+               if ( isset( $attributes['opensInNewTab'] ) && true === $attributes['opensInNewTab'] ) {
+                       $html .= ' target="_blank"  ';
+               }
+
+               if ( isset( $attributes['rel'] ) ) {
+                       $html .= ' rel="' . esc_attr( $attributes['rel'] ) . '"';
+               } elseif ( isset( $attributes['nofollow'] ) && $attributes['nofollow'] ) {
+                       $html .= ' rel="nofollow"';
+               }
+
+               if ( isset( $attributes['title'] ) ) {
+                       $html .= ' title="' . esc_attr( $attributes['title'] ) . '"';
+               }
+
+               $html .= '>';
+               // End appending HTML attributes to anchor tag.
+
+               if ( isset( $attributes['label'] ) ) {
+                       $html .= wp_kses(
+                               $attributes['label'],
+                               array(
+                                       'code'   => array(),
+                                       'em'     => array(),
+                                       'img'    => array(
+                                               'scale' => array(),
+                                               'class' => array(),
+                                               'style' => array(),
+                                               'src'   => array(),
+                                               'alt'   => array(),
+                                       ),
+                                       's'      => array(),
+                                       'span'   => array(
+                                               'style' => array(),
+                                       ),
+                                       'strong' => array(),
+                               )
+                       );
+               }
+
+               $html .= '</a>';
+               // End anchor tag content.
+
+               if ( $show_submenu_indicators ) {
+                       // The submenu icon is rendered in a button here
+                       // so that there's a clickable elment to open the submenu.
+                       $html .= '<button class="wp-block-navigation__submenu-icon wp-block-navigation-submenu__toggle" aria-expanded="false">' . block_core_navigation_submenu_render_submenu_icon() . '</button>';
+               }
+       } else {
+               // If menus open on click, we render the parent as a button.
+               $html .= '<button class="wp-block-navigation-item__content wp-block-navigation-submenu__toggle" aria-expanded="false">';
+
+               // Wrap title with span to isolate it from submenu icon.
+               $html .= '<span class="wp-block-navigation-item__label">';
+
+               if ( isset( $attributes['label'] ) ) {
+                       $html .= wp_kses(
+                               $attributes['label'],
+                               array(
+                                       'code'   => array(),
+                                       'em'     => array(),
+                                       'img'    => array(
+                                               'scale' => array(),
+                                               'class' => array(),
+                                               'style' => array(),
+                                               'src'   => array(),
+                                               'alt'   => array(),
+                                       ),
+                                       's'      => array(),
+                                       'span'   => array(
+                                               'style' => array(),
+                                       ),
+                                       'strong' => array(),
+                               )
+                       );
+               }
+
+               $html .= '</span>';
+
+               $html .= '<span class="wp-block-navigation__submenu-icon">' . block_core_navigation_submenu_render_submenu_icon() . '</span>';
+
+               $html .= '</button>';
+
+       }
+
+       if ( $has_submenu ) {
+               $inner_blocks_html = '';
+               foreach ( $block->inner_blocks as $inner_block ) {
+                       $inner_blocks_html .= $inner_block->render();
+               }
+
+               $html .= sprintf(
+                       '<ul class="wp-block-navigation__submenu-container">%s</ul>',
+                       $inner_blocks_html
+               );
+       }
+
+       $html .= '</li>';
+
+       return $html;
+}
+
+/**
+ * Register the navigation submenu block.
+ *
+ * @uses render_block_core_navigation_submenu()
+ * @throws WP_Error An WP_Error exception parsing the block definition.
+ */
+function register_block_core_navigation_submenu() {
+       register_block_type_from_metadata(
+               __DIR__ . '/navigation-submenu',
+               array(
+                       'render_callback' => 'render_block_core_navigation_submenu',
+               )
+       );
+}
+add_action( 'init', 'register_block_core_navigation_submenu' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation-submenu.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksnavigationphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/navigation.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/navigation.php                               (rev 0)
+++ trunk/src/wp-includes/blocks/navigation.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,429 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/navigation` block.
+ *
+ * @package gutenberg
+ */
+
+/**
+ * Build an array with CSS classes and inline styles defining the colors
+ * which will be applied to the navigation markup in the front-end.
+ *
+ * @param  array $attributes Navigation block attributes.
+ * @return array Colors CSS classes and inline styles.
+ */
+function block_core_navigation_build_css_colors( $attributes ) {
+       $colors = array(
+               'css_classes'   => array(),
+               'inline_styles' => '',
+       );
+
+       // Text color.
+       $has_named_text_color  = array_key_exists( 'textColor', $attributes );
+       $has_custom_text_color = array_key_exists( 'customTextColor', $attributes );
+
+       // If has text color.
+       if ( $has_custom_text_color || $has_named_text_color ) {
+               // Add has-text-color class.
+               $colors['css_classes'][] = 'has-text-color';
+       }
+
+       if ( $has_named_text_color ) {
+               // Add the color class.
+               $colors['css_classes'][] = sprintf( 'has-%s-color', $attributes['textColor'] );
+       } elseif ( $has_custom_text_color ) {
+               // Add the custom color inline style.
+               $colors['inline_styles'] .= sprintf( 'color: %s;', $attributes['customTextColor'] );
+       }
+
+       // Background color.
+       $has_named_background_color  = array_key_exists( 'backgroundColor', $attributes );
+       $has_custom_background_color = array_key_exists( 'customBackgroundColor', $attributes );
+
+       // If has background color.
+       if ( $has_custom_background_color || $has_named_background_color ) {
+               // Add has-background class.
+               $colors['css_classes'][] = 'has-background';
+       }
+
+       if ( $has_named_background_color ) {
+               // Add the background-color class.
+               $colors['css_classes'][] = sprintf( 'has-%s-background-color', $attributes['backgroundColor'] );
+       } elseif ( $has_custom_background_color ) {
+               // Add the custom background-color inline style.
+               $colors['inline_styles'] .= sprintf( 'background-color: %s;', $attributes['customBackgroundColor'] );
+       }
+
+       return $colors;
+}
+
+/**
+ * Build an array with CSS classes and inline styles defining the font sizes
+ * which will be applied to the navigation markup in the front-end.
+ *
+ * @param  array $attributes Navigation block attributes.
+ * @return array Font size CSS classes and inline styles.
+ */
+function block_core_navigation_build_css_font_sizes( $attributes ) {
+       // CSS classes.
+       $font_sizes = array(
+               'css_classes'   => array(),
+               'inline_styles' => '',
+       );
+
+       $has_named_font_size  = array_key_exists( 'fontSize', $attributes );
+       $has_custom_font_size = array_key_exists( 'customFontSize', $attributes );
+
+       if ( $has_named_font_size ) {
+               // Add the font size class.
+               $font_sizes['css_classes'][] = sprintf( 'has-%s-font-size', $attributes['fontSize'] );
+       } elseif ( $has_custom_font_size ) {
+               // Add the custom font size inline style.
+               $font_sizes['inline_styles'] = sprintf( 'font-size: %spx;', $attributes['customFontSize'] );
+       }
+
+       return $font_sizes;
+}
+
+/**
+ * Returns the menu items for a WordPress menu location.
+ *
+ * @param string $location The menu location.
+ * @return array Menu items for the location.
+ */
+function gutenberg_get_menu_items_at_location( $location ) {
+       if ( empty( $location ) ) {
+               return;
+       }
+
+       // Build menu data. The following approximates the code in
+       // `wp_nav_menu()` and `gutenberg_output_block_nav_menu`.
+
+       // Find the location in the list of locations, returning early if the
+       // location can't be found.
+       $locations = get_nav_menu_locations();
+       if ( ! isset( $locations[ $location ] ) ) {
+               return;
+       }
+
+       // Get the menu from the location, returning early if there is no
+       // menu or there was an error.
+       $menu = wp_get_nav_menu_object( $locations[ $location ] );
+       if ( ! $menu || is_wp_error( $menu ) ) {
+               return;
+       }
+
+       $menu_items = wp_get_nav_menu_items( $menu->term_id, array( 'update_post_term_cache' => false ) );
+       _wp_menu_item_classes_by_context( $menu_items );
+
+       return $menu_items;
+}
+
+/**
+ * Sorts a standard array of menu items into a nested structure keyed by the
+ * id of the parent menu.
+ *
+ * @param array $menu_items Menu items to sort.
+ * @return array An array keyed by the id of the parent menu where each element
+ *               is an array of menu items that belong to that parent.
+ */
+function gutenberg_sort_menu_items_by_parent_id( $menu_items ) {
+       $sorted_menu_items = array();
+       foreach ( (array) $menu_items as $menu_item ) {
+               $sorted_menu_items[ $menu_item->menu_order ] = $menu_item;
+       }
+       unset( $menu_items, $menu_item );
+
+       $menu_items_by_parent_id = array();
+       foreach ( $sorted_menu_items as $menu_item ) {
+               $menu_items_by_parent_id[ $menu_item->menu_item_parent ][] = $menu_item;
+       }
+
+       return $menu_items_by_parent_id;
+}
+
+/**
+ * Turns menu item data into a nested array of parsed blocks
+ *
+ * @param array $menu_items               An array of menu items that represent
+ *                                        an individual level of a menu.
+ * @param array $menu_items_by_parent_id  An array keyed by the id of the
+ *                                        parent menu where each element is an
+ *                                        array of menu items that belong to
+ *                                        that parent.
+ * @return array An array of parsed block data.
+ */
+function gutenberg_parse_blocks_from_menu_items( $menu_items, $menu_items_by_parent_id ) {
+       if ( empty( $menu_items ) ) {
+               return array();
+       }
+
+       $blocks = array();
+
+       foreach ( $menu_items as $menu_item ) {
+               $class_name       = ! empty( $menu_item->classes ) ? implode( ' ', (array) $menu_item->classes ) : null;
+               $id               = ( null !== $menu_item->object_id && 'custom' !== $menu_item->object ) ? $menu_item->object_id : null;
+               $opens_in_new_tab = null !== $menu_item->target && '_blank' === $menu_item->target;
+               $rel              = ( null !== $menu_item->xfn && '' !== $menu_item->xfn ) ? $menu_item->xfn : null;
+               $kind             = null !== $menu_item->type ? str_replace( '_', '-', $menu_item->type ) : 'custom';
+
+               $block = array(
+                       'blockName' => 'core/navigation-link',
+                       'attrs'     => array(
+                               'className'     => $class_name,
+                               'description'   => $menu_item->description,
+                               'id'            => $id,
+                               'kind'          => $kind,
+                               'label'         => $menu_item->title,
+                               'opensInNewTab' => $opens_in_new_tab,
+                               'rel'           => $rel,
+                               'title'         => $menu_item->attr_title,
+                               'type'          => $menu_item->object,
+                               'url'           => $menu_item->url,
+                       ),
+               );
+
+               $block['innerBlocks'] = gutenberg_parse_blocks_from_menu_items(
+                       isset( $menu_items_by_parent_id[ $menu_item->ID ] )
+                                       ? $menu_items_by_parent_id[ $menu_item->ID ]
+                                       : array(),
+                       $menu_items_by_parent_id
+               );
+
+               $blocks[] = $block;
+       }
+
+       return $blocks;
+}
+
+/**
+ * Returns the top-level submenu SVG chevron icon.
+ *
+ * @return string
+ */
+function block_core_navigation_render_submenu_icon() {
+       return '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" role="img" aria-hidden="true" focusable="false"><path d="M1.50002 4L6.00002 8L10.5 4" stroke-width="1.5"></path></svg>';
+}
+
+/**
+ * Renders the `core/navigation` block on server.
+ *
+ * @param array $attributes The block attributes.
+ * @param array $content The saved content.
+ * @param array $block The parsed block.
+ *
+ * @return string Returns the post content with the legacy widget added.
+ */
+function render_block_core_navigation( $attributes, $content, $block ) {
+       /**
+        * Deprecated:
+        * The rgbTextColor and rgbBackgroundColor attributes
+        * have been deprecated in favor of
+        * customTextColor and customBackgroundColor ones.
+        * Move the values from old attrs to the new ones.
+        */
+       if ( isset( $attributes['rgbTextColor'] ) && empty( $attributes['textColor'] ) ) {
+               $attributes['customTextColor'] = $attributes['rgbTextColor'];
+       }
+
+       if ( isset( $attributes['rgbBackgroundColor'] ) && empty( $attributes['backgroundColor'] ) ) {
+               $attributes['customBackgroundColor'] = $attributes['rgbBackgroundColor'];
+       }
+
+       unset( $attributes['rgbTextColor'], $attributes['rgbBackgroundColor'] );
+
+       /**
+        * This is for backwards compatibility after `isResponsive` attribute has been removed.
+        */
+       $has_old_responsive_attribute = ! empty( $attributes['isResponsive'] ) && $attributes['isResponsive'];
+       $is_responsive_menu           = isset( $attributes['overlayMenu'] ) && 'never' !== $attributes['overlayMenu'] || $has_old_responsive_attribute;
+       $should_load_view_script      = ! wp_script_is( 'wp-block-navigation-view' ) && ( $is_responsive_menu || $attributes['openSubmenusOnClick'] || $attributes['showSubmenuIcon'] );
+       if ( $should_load_view_script ) {
+               wp_enqueue_script( 'wp-block-navigation-view' );
+       }
+
+       $inner_blocks = $block->inner_blocks;
+
+       // If `__unstableLocation` is defined, create inner blocks from the classic menu assigned to that location.
+       if ( empty( $inner_blocks ) && array_key_exists( '__unstableLocation', $attributes ) ) {
+               $menu_items = gutenberg_get_menu_items_at_location( $attributes['__unstableLocation'] );
+               if ( empty( $menu_items ) ) {
+                       return '';
+               }
+
+               $menu_items_by_parent_id = gutenberg_sort_menu_items_by_parent_id( $menu_items );
+               $parsed_blocks           = gutenberg_parse_blocks_from_menu_items( $menu_items_by_parent_id[0], $menu_items_by_parent_id );
+               $inner_blocks            = new WP_Block_List( $parsed_blocks, $attributes );
+       }
+
+       if ( ! empty( $block->context['navigationArea'] ) ) {
+               $area    = $block->context['navigationArea'];
+               $mapping = get_option( 'fse_navigation_areas', array() );
+               if ( ! empty( $mapping[ $area ] ) ) {
+                       $attributes['navigationMenuId'] = $mapping[ $area ];
+               }
+       }
+
+       // Load inner blocks from the navigation post.
+       if ( array_key_exists( 'navigationMenuId', $attributes ) ) {
+               $navigation_post = get_post( $attributes['navigationMenuId'] );
+               if ( ! isset( $navigation_post ) ) {
+                       return '';
+               }
+
+               $parsed_blocks = parse_blocks( $navigation_post->post_content );
+
+               // 'parse_blocks' includes a null block with '\n\n' as the content when
+               // it encounters whitespace. This code strips it.
+               $compacted_blocks = array_filter(
+                       $parsed_blocks,
+                       function( $block ) {
+                               return isset( $block['blockName'] );
+                       }
+               );
+
+               // TODO - this uses the full navigation block attributes for the
+               // context which could be refined.
+               $inner_blocks = new WP_Block_List( $compacted_blocks, $attributes );
+       }
+
+       if ( empty( $inner_blocks ) ) {
+               return '';
+       }
+       $colors     = block_core_navigation_build_css_colors( $attributes );
+       $font_sizes = block_core_navigation_build_css_font_sizes( $attributes );
+       $classes    = array_merge(
+               $colors['css_classes'],
+               $font_sizes['css_classes'],
+               $is_responsive_menu ? array( 'is-responsive' ) : array()
+       );
+
+       $inner_blocks_html = '';
+       $is_list_open      = false;
+       foreach ( $inner_blocks as $inner_block ) {
+               if ( ( 'core/navigation-link' === $inner_block->name || 'core/home-link' === $inner_block->name || 'core/site-title' === $inner_block->name || 'core/site-logo' === $inner_block->name || 'core/navigation-submenu' === $inner_block->name ) && ! $is_list_open ) {
+                       $is_list_open       = true;
+                       $inner_blocks_html .= '<ul class="wp-block-navigation__container">';
+               }
+               if ( 'core/navigation-link' !== $inner_block->name && 'core/home-link' !== $inner_block->name && 'core/site-title' !== $inner_block->name && 'core/site-logo' !== $inner_block->name && 'core/navigation-submenu' !== $inner_block->name && $is_list_open ) {
+                       $is_list_open       = false;
+                       $inner_blocks_html .= '</ul>';
+               }
+               if ( 'core/site-title' === $inner_block->name || 'core/site-logo' === $inner_block->name ) {
+                       $inner_blocks_html .= '<li class="wp-block-navigation-item">' . $inner_block->render() . '</li>';
+               } else {
+                       $inner_blocks_html .= $inner_block->render();
+               }
+       }
+
+       if ( $is_list_open ) {
+               $inner_blocks_html .= '</ul>';
+       }
+
+       $block_styles = isset( $attributes['styles'] ) ? $attributes['styles'] : '';
+
+       $wrapper_attributes = get_block_wrapper_attributes(
+               array(
+                       'class' => implode( ' ', $classes ),
+                       'style' => $block_styles . $colors['inline_styles'] . $font_sizes['inline_styles'],
+               )
+       );
+
+       $modal_unique_id = uniqid();
+
+       // Determine whether or not navigation elements should be wrapped in the markup required to make it responsive,
+       // return early if they don't.
+       if ( ! $is_responsive_menu ) {
+               return sprintf(
+                       '<nav %1$s>%2$s</nav>',
+                       $wrapper_attributes,
+                       $inner_blocks_html
+               );
+       }
+
+       $is_hidden_by_default = isset( $attributes['overlayMenu'] ) && 'always' === $attributes['overlayMenu'];
+
+       $responsive_container_classes = array(
+               'wp-block-navigation__responsive-container',
+               $is_hidden_by_default ? 'hidden-by-default' : '',
+       );
+       $open_button_classes          = array(
+               'wp-block-navigation__responsive-container-open',
+               $is_hidden_by_default ? 'always-shown' : '',
+       );
+
+       $responsive_container_markup = sprintf(
+               '<button aria-expanded="false" aria-haspopup="true" aria-label="%3$s" class="%6$s" data-micromodal-trigger="modal-%1$s"><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" role="img" aria-hidden="true" focusable="false"><rect x="4" y="7.5" width="16" height="1.5" /><rect x="4" y="15" width="16" height="1.5" /></svg></button>
+                       <div class="%5$s" id="modal-%1$s" aria-hidden="true">
+                               <div class="wp-block-navigation__responsive-close" tabindex="-1" data-micromodal-close>
+                                       <div class="wp-block-navigation__responsive-dialog" role="dialog" aria-modal="true" aria-labelledby="modal-%1$s-title" >
+                                                       <button aria-label="%4$s" data-micromodal-close class="wp-block-navigation__responsive-container-close"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" role="img" aria-hidden="true" focusable="false"><path d="M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z"></path></svg></button>
+                                               <div class="wp-block-navigation__responsive-container-content" id="modal-%1$s-content">
+                                                       %2$s
+                                               </div>
+                                       </div>
+                               </div>
+                       </div>',
+               $modal_unique_id,
+               $inner_blocks_html,
+               __( 'Open menu' ), // Open button label.
+               __( 'Close menu' ), // Close button label.
+               implode( ' ', $responsive_container_classes ),
+               implode( ' ', $open_button_classes )
+       );
+
+       return sprintf(
+               '<nav %1$s>%2$s</nav>',
+               $wrapper_attributes,
+               $responsive_container_markup
+       );
+}
+
+/**
+ * Register the navigation block.
+ *
+ * @uses render_block_core_navigation()
+ * @throws WP_Error An WP_Error exception parsing the block definition.
+ */
+function register_block_core_navigation() {
+       register_block_type_from_metadata(
+               __DIR__ . '/navigation',
+               array(
+                       'render_callback' => 'render_block_core_navigation',
+               )
+       );
+}
+
+add_action( 'init', 'register_block_core_navigation' );
+
+/**
+ * Filter that changes the parsed attribute values of navigation blocks contain typographic presets to contain the values directly.
+ *
+ * @param array $parsed_block The block being rendered.
+ * @return array The block being rendered without typographic presets.
+ */
+function block_core_navigation_typographic_presets_backcompatibility( $parsed_block ) {
+       if ( 'core/navigation' === $parsed_block['blockName'] ) {
+               $attribute_to_prefix_map = array(
+                       'fontStyle'      => 'var:preset|font-style|',
+                       'fontWeight'     => 'var:preset|font-weight|',
+                       'textDecoration' => 'var:preset|text-decoration|',
+                       'textTransform'  => 'var:preset|text-transform|',
+               );
+               foreach ( $attribute_to_prefix_map as $style_attribute => $prefix ) {
+                       if ( ! empty( $parsed_block['attrs']['style']['typography'][ $style_attribute ] ) ) {
+                               $prefix_len      = strlen( $prefix );
+                               $attribute_value = &$parsed_block['attrs']['style']['typography'][ $style_attribute ];
+                               if ( 0 === strncmp( $attribute_value, $prefix, $prefix_len ) ) {
+                                       $attribute_value = substr( $attribute_value, $prefix_len );
+                               }
+                               if ( 'textDecoration' === $style_attribute && 'strikethrough' === $attribute_value ) {
+                                       $attribute_value = 'line-through';
+                               }
+                       }
+               }
+       }
+       return $parsed_block;
+}
+
+add_filter( 'render_block_data', 'block_core_navigation_typographic_presets_backcompatibility' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/navigation.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockspatternblockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/pattern/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/pattern/block.json                           (rev 0)
+++ trunk/src/wp-includes/blocks/pattern/block.json     2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,17 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+       "apiVersion": 2,
+       "name": "core/pattern",
+       "title": "Pattern",
+       "category": "design",
+       "description": "Show a block pattern.",
+       "supports": {
+               "html": false,
+               "inserter": false
+       },
+       "textdomain": "default",
+       "attributes": {
+               "slug": {
+                       "type": "string"
+               }
+       }
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/pattern/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockspatternphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/pattern.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/pattern.php                          (rev 0)
+++ trunk/src/wp-includes/blocks/pattern.php    2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,44 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/pattern` block.
+ *
+ * @package WordPress
+ */
+
+/**
+ *  Registers the `core/pattern` block on the server.
+ *
+ * @return void
+ */
+function register_block_core_pattern() {
+       register_block_type_from_metadata(
+               __DIR__ . '/pattern',
+               array(
+                       'render_callback' => 'render_block_core_pattern',
+               )
+       );
+}
+
+/**
+ * Renders the `core/pattern` block on the server.
+ *
+ * @param array $attributes Block attributes.
+ *
+ * @return string Returns the output of the pattern.
+ */
+function render_block_core_pattern( $attributes ) {
+       if ( empty( $attributes['slug'] ) ) {
+               return '';
+       }
+
+       $slug     = $attributes['slug'];
+       $registry = WP_Block_Patterns_Registry::get_instance();
+       if ( ! $registry->is_registered( $slug ) ) {
+               return '';
+       }
+
+       $pattern = $registry->get_registered( $slug );
+       return do_blocks( $pattern['content'] );
+}
+
+add_action( 'init', 'register_block_core_pattern' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/pattern.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockspostauthorblockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/post-author/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/post-author/block.json                               (rev 0)
+++ trunk/src/wp-includes/blocks/post-author/block.json 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,53 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+       "apiVersion": 2,
+       "name": "core/post-author",
+       "title": "Post Author",
+       "category": "theme",
+       "description": "Add the author of this post.",
+       "textdomain": "default",
+       "attributes": {
+               "textAlign": {
+                       "type": "string"
+               },
+               "avatarSize": {
+                       "type": "number",
+                       "default": 48
+               },
+               "showAvatar": {
+                       "type": "boolean",
+                       "default": true
+               },
+               "showBio": {
+                       "type": "boolean"
+               },
+               "byline": {
+                       "type": "string"
+               }
+       },
+       "usesContext": [ "postType", "postId", "queryId" ],
+       "supports": {
+               "html": false,
+               "spacing": {
+                       "margin": true,
+                       "padding": true
+               },
+               "typography": {
+                       "fontSize": true,
+                       "lineHeight": true,
+                       "__experimentalFontStyle": true,
+                       "__experimentalFontWeight": true,
+                       "__experimentalLetterSpacing": true,
+                       "__experimentalTextTransform": true,
+                       "__experimentalDefaultControls": {
+                               "fontSize": true
+                       }
+               },
+               "color": {
+                       "gradients": true,
+                       "link": true,
+                       "__experimentalDuotone": ".wp-block-post-author__avatar img"
+               }
+       },
+       "editorStyle": "wp-block-post-author-editor",
+       "style": "wp-block-post-author"
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/post-author/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockspostauthorphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/post-author.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/post-author.php                              (rev 0)
+++ trunk/src/wp-includes/blocks/post-author.php        2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,61 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/post-author` block.
+ *
+ * @package WordPress
+ */
+
+/**
+ * Renders the `core/post-author` block on the server.
+ *
+ * @param  array    $attributes Block attributes.
+ * @param  string   $content    Block default content.
+ * @param  WP_Block $block      Block instance.
+ * @return string Returns the rendered author block.
+ */
+function render_block_core_post_author( $attributes, $content, $block ) {
+       if ( ! isset( $block->context['postId'] ) ) {
+               return '';
+       }
+
+       $author_id = get_post_field( 'post_author', $block->context['postId'] );
+       if ( empty( $author_id ) ) {
+               return '';
+       }
+
+       $avatar = ! empty( $attributes['avatarSize'] ) ? get_avatar(
+               $author_id,
+               $attributes['avatarSize']
+       ) : null;
+
+       $byline  = ! empty( $attributes['byline'] ) ? $attributes['byline'] : false;
+       $classes = array_merge(
+               isset( $attributes['className'] ) ? array( $attributes['className'] ) : array(),
+               isset( $attributes['itemsJustification'] ) ? array( 'items-justified-' . $attributes['itemsJustification'] ) : array(),
+               isset( $attributes['textAlign'] ) ? array( 'has-text-align-' . $attributes['textAlign'] ) : array()
+       );
+
+       $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) );
+
+       return sprintf( '<div %1$s>', $wrapper_attributes ) .
+       ( ! empty( $attributes['showAvatar'] ) ? '<div class="wp-block-post-author__avatar">' . $avatar . '</div>' : '' ) .
+       '<div class="wp-block-post-author__content">' .
+       ( ! empty( $byline ) ? '<p class="wp-block-post-author__byline">' . $byline . '</p>' : '' ) .
+       '<p class="wp-block-post-author__name">' . get_the_author_meta( 'display_name', $author_id ) . '</p>' .
+       ( ! empty( $attributes['showBio'] ) ? '<p class="wp-block-post-author__bio">' . get_the_author_meta( 'user_description', $author_id ) . '</p>' : '' ) .
+       '</div>' .
+       '</div>';
+}
+
+/**
+ * Registers the `core/post-author` block on the server.
+ */
+function register_block_core_post_author() {
+       register_block_type_from_metadata(
+               __DIR__ . '/post-author',
+               array(
+                       'render_callback' => 'render_block_core_post_author',
+               )
+       );
+}
+add_action( 'init', 'register_block_core_post_author' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/post-author.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockspostcommentsblockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/post-comments/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/post-comments/block.json                             (rev 0)
+++ trunk/src/wp-includes/blocks/post-comments/block.json       2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,34 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+       "apiVersion": 2,
+       "name": "core/post-comments",
+       "title": "Post Comments",
+       "category": "theme",
+       "description": "Display a post's comments.",
+       "textdomain": "default",
+       "attributes": {
+               "textAlign": {
+                       "type": "string"
+               }
+       },
+       "usesContext": [ "postId", "postType" ],
+       "supports": {
+               "html": false,
+               "align": [ "wide", "full" ],
+               "typography": {
+                       "fontSize": true,
+                       "lineHeight": true,
+                       "__experimentalFontStyle": true,
+                       "__experimentalFontWeight": true,
+                       "__experimentalLetterSpacing": true,
+                       "__experimentalTextTransform": true,
+                       "__experimentalDefaultControls": {
+                               "fontSize": true
+                       }
+               },
+               "color": {
+                       "gradients": true,
+                       "link": true
+               }
+       },
+       "style": "wp-block-post-comments"
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/post-comments/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockspostcommentsphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/post-comments.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/post-comments.php                            (rev 0)
+++ trunk/src/wp-includes/blocks/post-comments.php      2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,68 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/post-comments` block.
+ *
+ * @package WordPress
+ */
+
+/**
+ * Renders the `core/post-comments` block on the server.
+ *
+ * @param array    $attributes Block attributes.
+ * @param string   $content    Block default content.
+ * @param WP_Block $block      Block instance.
+ * @return string Returns the filtered post comments for the current post wrapped inside "p" tags.
+ */
+function render_block_core_post_comments( $attributes, $content, $block ) {
+       global $post;
+
+       $post_id = $block->context['postId'];
+       if ( ! isset( $post_id ) ) {
+               return '';
+       }
+
+       $comment_args = array(
+               'post_id' => $post_id,
+               'count'   => true,
+       );
+       // Return early if there are no comments and comments are closed.
+       if ( ! comments_open( $post_id ) && get_comments( $comment_args ) === 0 ) {
+               return '';
+       }
+
+       $post_before = $post;
+       $post        = get_post( $post_id );
+       setup_postdata( $post );
+
+       ob_start();
+       // There's a deprecation warning generated by WP Core.
+       // Ideally this deprecation is removed from Core.
+       // In the meantime, this removes it from the output.
+       add_filter( 'deprecated_file_trigger_error', '__return_false' );
+       comments_template();
+       remove_filter( 'deprecated_file_trigger_error', '__return_false' );
+       $post = $post_before;
+
+       $classes = '';
+       if ( isset( $attributes['textAlign'] ) ) {
+               $classes .= 'has-text-align-' . $attributes['textAlign'];
+       }
+
+       $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $classes ) );
+       $output             = ob_get_clean();
+
+       return sprintf( '<div %1$s>%2$s</div>', $wrapper_attributes, $output );
+}
+
+/**
+ * Registers the `core/post-comments` block on the server.
+ */
+function register_block_core_post_comments() {
+       register_block_type_from_metadata(
+               __DIR__ . '/post-comments',
+               array(
+                       'render_callback' => 'render_block_core_post_comments',
+               )
+       );
+}
+add_action( 'init', 'register_block_core_post_comments' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/post-comments.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockspostnavigationlinkblockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/post-navigation-link/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/post-navigation-link/block.json                              (rev 0)
+++ trunk/src/wp-includes/blocks/post-navigation-link/block.json        2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,43 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+       "apiVersion": 2,
+       "name": "core/post-navigation-link",
+       "title": "Post Navigation Link",
+       "category": "theme",
+       "description": "Displays the next or previous post link that is adjacent to the current post.",
+       "textdomain": "default",
+       "attributes": {
+               "textAlign": {
+                       "type": "string"
+               },
+               "type": {
+                       "type": "string",
+                       "default": "next"
+               },
+               "label": {
+                       "type": "string"
+               },
+               "showTitle": {
+                       "type": "boolean",
+                       "default": false
+               },
+               "linkLabel": {
+                       "type": "boolean",
+                       "default": false
+               }
+       },
+       "supports": {
+               "reusable": false,
+               "html": false,
+               "typography": {
+                       "fontSize": true,
+                       "lineHeight": true,
+                       "__experimentalFontStyle": true,
+                       "__experimentalFontWeight": true,
+                       "__experimentalLetterSpacing": true,
+                       "__experimentalTextTransform": true,
+                       "__experimentalDefaultControls": {
+                               "fontSize": true
+                       }
+               }
+       }
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/post-navigation-link/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockspostnavigationlinkphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/post-navigation-link.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/post-navigation-link.php                             (rev 0)
+++ trunk/src/wp-includes/blocks/post-navigation-link.php       2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,96 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/post-navigation-link` block.
+ *
+ * @package WordPress
+ */
+
+/**
+ * Renders the `core/post-navigation-link` block on the server.
+ *
+ * @param array  $attributes Block attributes.
+ * @param string $content    Block default content.
+ *
+ * @return string Returns the next or previous post link that is adjacent to the current post.
+ */
+function render_block_core_post_navigation_link( $attributes, $content ) {
+       if ( ! is_singular() ) {
+               return '';
+       }
+
+       // Get the nagigation type to show the proper link. Available options are `next|previous`.
+       $navigation_type = isset( $attributes['type'] ) ? $attributes['type'] : 'next';
+       // Allow only `next` and `previous` in `$navigation_type`.
+       if ( ! in_array( $navigation_type, array( 'next', 'previous' ), true ) ) {
+               return '';
+       }
+       $classes = "post-navigation-link-$navigation_type";
+       if ( isset( $attributes['textAlign'] ) ) {
+               $classes .= " has-text-align-{$attributes['textAlign']}";
+       }
+       $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $classes ) );
+       // Set default values.
+       $format = '%link';
+       $link   = 'next' === $navigation_type ? _x( 'Next', 'label for next post link' ) : _x( 'Previous', 'label for previous post link' );
+       $label  = '';
+
+       // If a custom label is provided, make this a link.
+       // `$label` is used to prepend the provided label, if we want to show the page title as well.
+       if ( isset( $attributes['label'] ) && ! empty( $attributes['label'] ) ) {
+               $label = "{$attributes['label']}";
+               $link  = $label;
+       }
+
+       // If we want to also show the page title, make the page title a link and prepend the label.
+       if ( isset( $attributes['showTitle'] ) && $attributes['showTitle'] ) {
+               /*
+                * If the label link option is not enabled but there is a custom label,
+                * display the custom label as text before the linked title.
+                */
+               if ( ! $attributes['linkLabel'] ) {
+                       if ( $label ) {
+                               $format = '<span class="post-navigation-link__label">' . $label . '</span> %link';
+                       }
+                       $link = '%title';
+               } elseif ( isset( $attributes['linkLabel'] ) && $attributes['linkLabel'] ) {
+                       // If the label link option is enabled and there is a custom label, display it before the title.
+                       if ( $label ) {
+                               $link = '<span class="post-navigation-link__label">' . $label . '</span> <span class="post-navigation-link__title">%title</title>';
+                       } else {
+                               /*
+                                * If the label link option is enabled and there is no custom label,
+                                * add a colon between the label and the post title.
+                                */
+                               $label = 'next' === $navigation_type ? _x( 'Next:', 'label before the title of the next post' ) : _x( 'Previous:', 'label before the title of the previous post' );
+                               $link  = sprintf(
+                                       '<span class="post-navigation-link__label">%1$s</span> <span class="post-navigation-link__title">%2$s</span>',
+                                       $label,
+                                       '%title'
+                               );
+                       }
+               }
+       }
+
+       // The dynamic portion of the function name, `$navigation_type`,
+       // refers to the type of adjacency, 'next' or 'previous'.
+       $get_link_function = "get_{$navigation_type}_post_link";
+       $content           = $get_link_function( $format, $link );
+       return sprintf(
+               '<div %1$s>%2$s</div>',
+               $wrapper_attributes,
+               $content
+       );
+}
+
+/**
+ * Registers the `core/post-navigation-link` block on the server.
+ */
+function register_block_core_post_navigation_link() {
+       register_block_type_from_metadata(
+               __DIR__ . '/post-navigation-link',
+               array(
+                       'render_callback' => 'render_block_core_post_navigation_link',
+               )
+       );
+}
+add_action( 'init', 'register_block_core_post_navigation_link' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/post-navigation-link.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockstermdescriptionblockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/term-description/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/term-description/block.json                          (rev 0)
+++ trunk/src/wp-includes/blocks/term-description/block.json    2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,28 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+       "apiVersion": 2,
+       "name": "core/term-description",
+       "title": "Term Description",
+       "category": "theme",
+       "description": "Display the description of categories, tags and custom taxonomies when viewing an archive.",
+       "textdomain": "default",
+       "attributes": {
+               "textAlign": {
+                       "type": "string"
+               }
+       },
+       "supports": {
+               "align": [ "wide", "full" ],
+               "html": false,
+               "color": {
+                       "link": true
+               },
+               "typography": {
+                       "fontSize": true,
+                       "lineHeight": true,
+                       "__experimentalDefaultControls": {
+                               "fontSize": true
+                       }
+               }
+       },
+       "editorStyle": "wp-block-term-description-editor"
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/term-description/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockstermdescriptionphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/term-description.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/term-description.php                         (rev 0)
+++ trunk/src/wp-includes/blocks/term-description.php   2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,45 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/term-description` block.
+ *
+ * @package WordPress
+ */
+
+/**
+ * Renders the `core/term-description` block on the server.
+ *
+ * @param array $attributes Block attributes.
+ *
+ * @return string Returns the description of the current taxonomy term, if available
+ */
+function render_block_core_term_description( $attributes ) {
+       $term_description = '';
+
+       if ( is_category() || is_tag() || is_tax() ) {
+               $term_description = term_description();
+       }
+
+       if ( empty( $term_description ) ) {
+               return '';
+       }
+
+       $extra_attributes   = ( isset( $attributes['textAlign'] ) )
+               ? array( 'class' => 'has-text-align-' . $attributes['textAlign'] )
+               : array();
+       $wrapper_attributes = get_block_wrapper_attributes( $extra_attributes );
+
+       return '<div ' . $wrapper_attributes . '>' . $term_description . '</div>';
+}
+
+/**
+ * Registers the `core/term-description` block on the server.
+ */
+function register_block_core_term_description() {
+       register_block_type_from_metadata(
+               __DIR__ . '/term-description',
+               array(
+                       'render_callback' => 'render_block_core_term_description',
+               )
+       );
+}
+add_action( 'init', 'register_block_core_term_description' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/term-description.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockswidgetgroupblockjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/widget-group/block.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/widget-group/block.json                              (rev 0)
+++ trunk/src/wp-includes/blocks/widget-group/block.json        2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,18 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+       "apiVersion": 2,
+       "name": "core/widget-group",
+       "category": "widgets",
+       "attributes": {
+               "title": {
+                       "type": "string"
+               }
+       },
+       "supports": {
+               "html": false,
+               "inserter": true,
+               "customClassName": true,
+               "reusable": false
+       },
+       "editorStyle": "wp-block-widget-group-editor",
+       "style": "wp-block-widget-group"
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/widget-group/block.json
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblockswidgetgroupphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/blocks/widget-group.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks/widget-group.php                             (rev 0)
+++ trunk/src/wp-includes/blocks/widget-group.php       2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,78 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Server-side rendering of the `core/widget-group` block.
+ *
+ * @package WordPress
+ */
+
+/**
+ * Renders the 'core/widget-group' block.
+ *
+ * @param array    $attributes The block attributes.
+ * @param string   $content The block content.
+ * @param WP_Block $block The block.
+ *
+ * @return string Rendered block.
+ */
+function render_block_core_widget_group( $attributes, $content, $block ) {
+       global $wp_registered_sidebars, $_sidebar_being_rendered;
+
+       if ( isset( $wp_registered_sidebars[ $_sidebar_being_rendered ] ) ) {
+               $before_title = $wp_registered_sidebars[ $_sidebar_being_rendered ]['before_title'];
+               $after_title  = $wp_registered_sidebars[ $_sidebar_being_rendered ]['after_title'];
+       } else {
+               $before_title = '<h2 class="widget-title">';
+               $after_title  = '</h2>';
+       }
+
+       $html = '';
+
+       if ( ! empty( $attributes['title'] ) ) {
+               $html .= $before_title . $attributes['title'] . $after_title;
+       }
+
+       $html .= '<div class="wp-widget-group__inner-blocks">';
+       foreach ( $block->inner_blocks as $inner_block ) {
+               $html .= $inner_block->render();
+       }
+       $html .= '</div>';
+
+       return $html;
+}
+
+/**
+ * Registers the 'core/widget-group' block.
+ */
+function register_block_core_widget_group() {
+       register_block_type_from_metadata(
+               __DIR__ . '/widget-group',
+               array(
+                       'render_callback' => 'render_block_core_widget_group',
+               )
+       );
+}
+
+add_action( 'init', 'register_block_core_widget_group' );
+
+/**
+ * Make a note of the sidebar being rendered before WordPress starts rendering
+ * it. This lets us get to the current sidebar in
+ * render_block_core_widget_group().
+ *
+ * @param int|string $index       Index, name, or ID of the dynamic sidebar.
+ */
+function note_sidebar_being_rendered( $index ) {
+       global $_sidebar_being_rendered;
+       $_sidebar_being_rendered = $index;
+}
+add_action( 'dynamic_sidebar_before', 'note_sidebar_being_rendered' );
+
+/**
+ * Clear whatever we set in note_sidebar_being_rendered() after WordPress
+ * finishes rendering a sidebar.
+ */
+function discard_sidebar_being_rendered() {
+       global $_sidebar_being_rendered;
+       unset( $_sidebar_being_rendered );
+}
+add_action( 'dynamic_sidebar_after', 'discard_sidebar_being_rendered' );
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/src/wp-includes/blocks/widget-group.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunksrcwpincludesblocksphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/blocks.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/blocks.php  2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/blocks.php    2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1182,3 +1182,117 @@
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px">        return null;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+/**
+ * Enqueue a stylesheet for a specific block.
+ *
+ * If the theme has opted-in to separate-styles loading,
+ * then the stylesheet will be enqueued on-render,
+ * otherwise when the block inits.
+ *
+ * @param string $block_name The block-name, including namespace.
+ * @param array  $args       An array of arguments [handle,src,deps,ver,media].
+ *
+ * @return void
+ */
+function wp_enqueue_block_style( $block_name, $args ) {
+       $args = wp_parse_args(
+               $args,
+               array(
+                       'handle' => '',
+                       'src'    => '',
+                       'deps'   => array(),
+                       'ver'    => false,
+                       'media'  => 'all',
+               )
+       );
+
+       /**
+        * Callback function to register and enqueue styles.
+        *
+        * @param string $content When the callback is used for the render_block filter,
+        *                        the content needs to be returned so the function parameter
+        *                        is to ensure the content exists.
+        *
+        * @return string
+        */
+       $callback = static function( $content ) use ( $args ) {
+               // Register the stylesheet.
+               if ( ! empty( $args['src'] ) ) {
+                       wp_register_style( $args['handle'], $args['src'], $args['deps'], $args['ver'], $args['media'] );
+               }
+
+               // Add `path` data if provided.
+               if ( isset( $args['path'] ) ) {
+                       wp_style_add_data( $args['handle'], 'path', $args['path'] );
+
+                       // Get the RTL file path.
+                       $rtl_file_path = str_replace( '.css', '-rtl.css', $args['path'] );
+
+                       // Add RTL stylesheet.
+                       if ( file_exists( $rtl_file_path ) ) {
+                               wp_style_add_data( $args['hanle'], 'rtl', 'replace' );
+
+                               if ( is_rtl() ) {
+                                       wp_style_add_data( $args['handle'], 'path', $rtl_file_path );
+                               }
+                       }
+               }
+
+               // Enqueue the stylesheet.
+               wp_enqueue_style( $args['handle'] );
+
+               return $content;
+       };
+
+       $hook = did_action( 'wp_enqueue_scripts' ) ? 'wp_footer' : 'wp_enqueue_scripts';
+       if ( wp_should_load_separate_core_block_assets() ) {
+               $hook = "render_block_$block_name";
+       }
+
+       /*
+        * The filter's callback here is an anonymous function because
+        * using a named function in this case is not possible.
+        *
+        * The function cannot be unhooked, however, users are still able
+        * to dequeue the stylesheets registered/enqueued by the callback
+        * which is why in this case, using an anonymous function
+        * was deemed acceptable.
+        */
+       add_filter( $hook, $callback );
+
+       // Enqueue assets in the editor.
+       add_action( 'enqueue_block_assets', $callback );
+}
+
+/**
+ * Allow multiple block styles.
+ *
+ * @param array $metadata Metadata for registering a block type.
+ *
+ * @return array
+ */
+function _wp_multiple_block_styles( $metadata ) {
+       foreach ( array( 'style', 'editorStyle' ) as $key ) {
+               if ( ! empty( $metadata[ $key ] ) && is_array( $metadata[ $key ] ) ) {
+                       $default_style = array_shift( $metadata[ $key ] );
+                       foreach ( $metadata[ $key ] as $handle ) {
+                               $args = array( 'handle' => $handle );
+                               if ( 0 === strpos( $handle, 'file:' ) && isset( $metadata['file'] ) ) {
+                                       $style_path = remove_block_asset_path_prefix( $handle );
+                                       $args       = array(
+                                               'handle' => sanitize_key( "{$metadata['name']}-{$style_path}" ),
+                                               'src'    => plugins_url( $style_path, $metadata['file'] ),
+                                       );
+                               }
+
+                               wp_enqueue_block_style( $metadata['name'], $args );
+                       }
+
+                       // Only return the 1st item in the array.
+                       $metadata[ $key ] = $default_style;
+               }
+       }
+       return $metadata;
+}
+add_filter( 'block_type_metadata', '_wp_multiple_block_styles' );
</ins></span></pre></div>
<a id="trunksrcwpincludesdefaultfiltersphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/default-filters.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/default-filters.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/default-filters.php   2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -581,6 +581,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> add_action( 'admin_footer-post.php', 'wp_add_iframed_editor_assets_html' );
</span><span class="cx" style="display: block; padding: 0 10px"> add_action( 'admin_footer-post-new.php', 'wp_add_iframed_editor_assets_html' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+add_action( 'admin_footer-widgets.php', 'wp_add_iframed_editor_assets_html' );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> // Taxonomy.
</span><span class="cx" style="display: block; padding: 0 10px"> add_action( 'init', 'create_initial_taxonomies', 0 ); // Highest priority.
</span></span></pre></div>
<a id="trunksrcwpincludesksesphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/kses.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/kses.php    2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/kses.php      2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2287,6 +2287,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        'border-right-width',
</span><span class="cx" style="display: block; padding: 0 10px">                        'border-bottom',
</span><span class="cx" style="display: block; padding: 0 10px">                        'border-bottom-color',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        'border-bottom-left-radius',
+                       'border-bottom-right-radius',
</ins><span class="cx" style="display: block; padding: 0 10px">                         'border-bottom-style',
</span><span class="cx" style="display: block; padding: 0 10px">                        'border-bottom-width',
</span><span class="cx" style="display: block; padding: 0 10px">                        'border-bottom-right-radius',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2297,6 +2299,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        'border-left-width',
</span><span class="cx" style="display: block; padding: 0 10px">                        'border-top',
</span><span class="cx" style="display: block; padding: 0 10px">                        'border-top-color',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        'border-top-left-radius',
+                       'border-top-right-radius',
</ins><span class="cx" style="display: block; padding: 0 10px">                         'border-top-style',
</span><span class="cx" style="display: block; padding: 0 10px">                        'border-top-width',
</span><span class="cx" style="display: block; padding: 0 10px">                        'border-top-left-radius',
</span></span></pre></div>
<a id="trunksrcwpincludespostphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/post.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/post.php    2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/post.php      2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -450,6 +450,51 @@
</span><span class="cx" style="display: block; padding: 0 10px">                )
</span><span class="cx" style="display: block; padding: 0 10px">        );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        register_post_type(
+               'wp_navigation',
+               array(
+                       'labels'                => array(
+                               'name'                  => __( 'Navigation Menus', 'gutenberg' ),
+                               'singular_name'         => __( 'Navigation Menu', 'gutenberg' ),
+                               'menu_name'             => _x( 'Navigation Menus', 'Admin Menu text', 'gutenberg' ),
+                               'add_new'               => _x( 'Add New', 'Navigation Menu', 'gutenberg' ),
+                               'add_new_item'          => __( 'Add New Navigation Menu', 'gutenberg' ),
+                               'new_item'              => __( 'New Navigation Menu', 'gutenberg' ),
+                               'edit_item'             => __( 'Edit Navigation Menu', 'gutenberg' ),
+                               'view_item'             => __( 'View Navigation Menu', 'gutenberg' ),
+                               'all_items'             => __( 'All Navigation Menus', 'gutenberg' ),
+                               'search_items'          => __( 'Search Navigation Menus', 'gutenberg' ),
+                               'parent_item_colon'     => __( 'Parent Navigation Menu:', 'gutenberg' ),
+                               'not_found'             => __( 'No Navigation Menu found.', 'gutenberg' ),
+                               'not_found_in_trash'    => __( 'No Navigation Menu found in Trash.', 'gutenberg' ),
+                               'archives'              => __( 'Navigation Menu archives', 'gutenberg' ),
+                               'insert_into_item'      => __( 'Insert into Navigation Menu', 'gutenberg' ),
+                               'uploaded_to_this_item' => __( 'Uploaded to this Navigation Menu', 'gutenberg' ),
+                               // Some of these are a bit weird, what are they for?
+                               'filter_items_list'     => __( 'Filter Navigation Menu list', 'gutenberg' ),
+                               'items_list_navigation' => __( 'Navigation Menus list navigation', 'gutenberg' ),
+                               'items_list'            => __( 'Navigation Menus list', 'gutenberg' ),
+                       ),
+                       'description'           => __( 'Navigation menus.', 'gutenberg' ),
+                       'public'                => false,
+                       '_builtin'              => true, /* internal use only. don't use this when registering your own post type. */
+                       'has_archive'           => false,
+                       'show_ui'               => false,
+                       'show_in_menu'          => 'themes.php',
+                       'show_in_admin_bar'     => false,
+                       'show_in_rest'          => true,
+                       'rewrite'               => false,
+                       'map_meta_cap'          => true,
+                       'rest_base'             => 'navigation',
+                       'rest_controller_class' => 'WP_REST_Posts_Controller',
+                       'supports'              => array(
+                               'title',
+                               'editor',
+                               'revisions',
+                       ),
+               )
+       );
+
</ins><span class="cx" style="display: block; padding: 0 10px">         register_post_status(
</span><span class="cx" style="display: block; padding: 0 10px">                'publish',
</span><span class="cx" style="display: block; padding: 0 10px">                array(
</span></span></pre></div>
<a id="trunksrcwpincludesrestapiendpointsclasswprestuserscontrollerphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php       2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -311,6 +311,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        $prepared_args['has_published_posts'] = get_post_types( array( 'show_in_rest' => true ), 'names' );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                if ( ! empty( $request['has_published_posts'] ) ) {
+                       $prepared_args['has_published_posts'] = ( true === $request['has_published_posts'] )
+                               ? get_post_types( array( 'show_in_rest' => true ), 'names' )
+                               : (array) $request['has_published_posts'];
+               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( ! empty( $prepared_args['search'] ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $prepared_args['search'] = '*' . $prepared_args['search'] . '*';
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1580,6 +1586,15 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        ),
</span><span class="cx" style="display: block; padding: 0 10px">                );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                $query_params['has_published_posts'] = array(
+                       'description' => __( 'Limit result set to users who have published posts.' ),
+                       'type'        => array( 'boolean', 'array' ),
+                       'items'       => array(
+                               'type' => 'string',
+                               'enum' => get_post_types( array( 'show_in_rest' => true ), 'names' ),
+                       ),
+               );
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 /**
</span><span class="cx" style="display: block; padding: 0 10px">                 * Filters REST API collection parameters for the users controller.
</span><span class="cx" style="display: block; padding: 0 10px">                 *
</span></span></pre></div>
<a id="trunksrcwpincludesrestapiendpointsclasswprestwidgettypescontrollerphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php        2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php  2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -99,6 +99,29 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                ),
</span><span class="cx" style="display: block; padding: 0 10px">                        )
</span><span class="cx" style="display: block; padding: 0 10px">                );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+               register_rest_route(
+                       $this->namespace,
+                       '/' . $this->rest_base . '/(?P<id>[a-zA-Z0-9_-]+)/render',
+                       array(
+                               array(
+                                       'methods'             => WP_REST_Server::CREATABLE,
+                                       'permission_callback' => array( $this, 'get_item_permissions_check' ),
+                                       'callback'            => array( $this, 'render' ),
+                                       'args'                => array(
+                                               'id'       => array(
+                                                       'description' => __( 'The widget type id.', 'default' ),
+                                                       'type'        => 'string',
+                                                       'required'    => true,
+                                               ),
+                                               'instance' => array(
+                                                       'description' => __( 'Current instance settings of the widget.', 'default' ),
+                                                       'type'        => 'object',
+                                               ),
+                                       ),
+                               ),
+                       )
+               );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -560,6 +583,78 @@
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         * Renders a single Legacy Widget and wraps it in a JSON-encodable array.
+        *
+        * @since 5.9.0
+        *
+        * @param WP_REST_Request $request Full details about the request.
+        *
+        * @return array An array with rendered Legacy Widget HTML.
+        */
+       public function render( $request ) {
+               return array(
+                       'preview' => $this->render_legacy_widget_preview_iframe(
+                               $request['id'],
+                               isset( $request['instance'] ) ? $request['instance'] : null
+                       ),
+               );
+       }
+
+       /**
+        * Renders a page containing a preview of the requested Legacy Widget block.
+        *
+        * @since 5.9.0
+        *
+        * @param string $id_base The id base of the requested widget.
+        * @param array  $instance The widget instance attributes.
+        *
+        * @return string Rendered Legacy Widget block preview.
+        */
+       private function render_legacy_widget_preview_iframe( $id_base, $instance ) {
+               if ( ! defined( 'IFRAME_REQUEST' ) ) {
+                       define( 'IFRAME_REQUEST', true );
+               }
+
+               ob_start();
+               ?>
+               <!doctype html>
+               <html <?php language_attributes(); ?>>
+               <head>
+                       <meta charset="<?php bloginfo( 'charset' ); ?>" />
+                       <meta name="viewport" content="width=device-width, initial-scale=1" />
+                       <link rel="profile" href="https://gmpg.org/xfn/11" />
+                       <?php wp_head(); ?>
+                       <style>
+                               /* Reset theme styles */
+                               html, body, #page, #content {
+                                       padding: 0 !important;
+                                       margin: 0 !important;
+                               }
+                       </style>
+               </head>
+               <body <?php body_class(); ?>>
+               <div id="page" class="site">
+                       <div id="content" class="site-content">
+                               <?php
+                               $registry = WP_Block_Type_Registry::get_instance();
+                               $block    = $registry->get_registered( 'core/legacy-widget' );
+                               echo $block->render(
+                                       array(
+                                               'idBase'   => $id_base,
+                                               'instance' => $instance,
+                                       )
+                               );
+                               ?>
+                       </div><!-- #content -->
+               </div><!-- #page -->
+               <?php wp_footer(); ?>
+               </body>
+               </html>
+               <?php
+               return ob_get_clean();
+       }
+
+       /**
</ins><span class="cx" style="display: block; padding: 0 10px">          * Retrieves the query params for collections.
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @since 5.8.0
</span></span></pre></div>
<a id="trunksrcwpincludesscriptloaderphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/script-loader.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/script-loader.php   2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/script-loader.php     2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -103,8 +103,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">        );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        $vendor_scripts_versions = array(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                'react'                       => '16.13.1',
-               'react-dom'                   => '16.13.1',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         'react'                       => '17.0.1',
+               'react-dom'                   => '17.0.1',
</ins><span class="cx" style="display: block; padding: 0 10px">                 'regenerator-runtime'         => '0.13.7',
</span><span class="cx" style="display: block; padding: 0 10px">                'moment'                      => '2.29.1',
</span><span class="cx" style="display: block; padding: 0 10px">                'lodash'                      => '4.17.19',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1598,6 +1598,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        'wp-block-library',
</span><span class="cx" style="display: block; padding: 0 10px">                        'wp-reusable-blocks',
</span><span class="cx" style="display: block; padding: 0 10px">                ),
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                'edit-site'            => array(
+                       'wp-components',
+                       'wp-block-editor',
+                       'wp-edit-blocks',
+               ),
</ins><span class="cx" style="display: block; padding: 0 10px">         );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        foreach ( $package_styles as $package => $dependencies ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1655,6 +1660,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                'wp-components',
</span><span class="cx" style="display: block; padding: 0 10px">                'wp-customize-widgets',
</span><span class="cx" style="display: block; padding: 0 10px">                'wp-edit-post',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                'wp-edit-site',
</ins><span class="cx" style="display: block; padding: 0 10px">                 'wp-edit-widgets',
</span><span class="cx" style="display: block; padding: 0 10px">                'wp-editor',
</span><span class="cx" style="display: block; padding: 0 10px">                'wp-format-library',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2265,7 +2271,19 @@
</span><span class="cx" style="display: block; padding: 0 10px">        wp_enqueue_style( 'wp-block-library' );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        if ( current_theme_supports( 'wp-block-styles' ) ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                wp_enqueue_style( 'wp-block-library-theme' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if ( wp_should_load_separate_core_block_assets() ) {
+                       $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? 'css' : 'min.css';
+                       $files  = glob( __DIR__ . "/blocks/**/theme.$suffix" );
+                       foreach ( $files as $path ) {
+                               $block_name = basename( dirname( $path ) );
+                               if ( is_rtl() && file_exists( __DIR__ . "/blocks/$block_name/theme-rtl.$suffix" ) ) {
+                                       $path = __DIR__ . "/blocks/$block_name/theme-rtl.$suffix";
+                               }
+                               wp_add_inline_style( "wp-block-{$block_name}", file_get_contents( $path ) );
+                       }
+               } else {
+                       wp_enqueue_style( 'wp-block-library-theme' );
+               }
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2773,6 +2791,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">  * @since 5.8.0
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> function wp_add_iframed_editor_assets_html() {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        global $pagenow;
+
</ins><span class="cx" style="display: block; padding: 0 10px">         if ( ! wp_should_load_block_editor_scripts_and_styles() ) {
</span><span class="cx" style="display: block; padding: 0 10px">                return;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2785,6 +2805,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                'wp-edit-blocks',
</span><span class="cx" style="display: block; padding: 0 10px">        );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        if ( 'widgets.php' === $pagenow || 'customize.php' === $pagenow ) {
+               $style_handles[] = 'wp-widgets';
+               $style_handles[] = 'wp-edit-widgets';
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         $block_registry = WP_Block_Type_Registry::get_instance();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        foreach ( $block_registry->get_all_registered() as $block_type ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2806,7 +2831,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        ob_start();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        wp_styles()->done = array();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // We do not need reset styles for the iframed editor.
+       wp_styles()->done = array( 'wp-reset-editor-styles' );
</ins><span class="cx" style="display: block; padding: 0 10px">         wp_styles()->do_items( $style_handles );
</span><span class="cx" style="display: block; padding: 0 10px">        wp_styles()->done = $done;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span></span></pre></div>
<a id="trunksrcwpincludestemplatecanvasphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/template-canvas.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/template-canvas.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/template-canvas.php   2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -10,8 +10,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">  * This needs to run before <head> so that blocks can add scripts and styles in wp_head().
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> $template_html = get_the_block_template_html();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-?>
-<!DOCTYPE html>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+?><!DOCTYPE html>
</ins><span class="cx" style="display: block; padding: 0 10px"> <html <?php language_attributes(); ?>>
</span><span class="cx" style="display: block; padding: 0 10px"> <head>
</span><span class="cx" style="display: block; padding: 0 10px">        <meta charset="<?php bloginfo( 'charset' ); ?>" />
</span></span></pre></div>
<a id="trunksrcwpincludesthemephp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/theme.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/theme.php   2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-includes/theme.php     2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4075,3 +4075,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">                )
</span><span class="cx" style="display: block; padding: 0 10px">        );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+/**
+ * Returns whether the current theme is a block-based theme or not.
+ *
+ * @since 5.9.0
+ *
+ * @return boolean Whether the current theme is a block-based theme or not.
+ */
+function wp_is_block_template_theme() {
+       return is_readable( get_theme_file_path( '/block-templates/index.html' ) );
+}
</ins></span></pre></div>
<a id="trunksrcwpsettingsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-settings.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-settings.php 2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/src/wp-settings.php   2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -317,6 +317,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/block-supports/border.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/block-supports/colors.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/block-supports/custom-classname.php';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+require ABSPATH . WPINC . '/block-supports/dimensions.php';
</ins><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/block-supports/duotone.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/block-supports/elements.php';
</span><span class="cx" style="display: block; padding: 0 10px"> require ABSPATH . WPINC . '/block-supports/generated-classname.php';
</span></span></pre></div>
<a id="trunktestsphpunitincludesfunctionsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/includes/functions.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/includes/functions.php        2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/tests/phpunit/includes/functions.php  2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -307,20 +307,27 @@
</span><span class="cx" style="display: block; padding: 0 10px">        remove_action( 'init', 'register_block_core_calendar' );
</span><span class="cx" style="display: block; padding: 0 10px">        remove_action( 'init', 'register_block_core_categories' );
</span><span class="cx" style="display: block; padding: 0 10px">        remove_action( 'init', 'register_block_core_file' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        remove_action( 'init', 'register_block_core_loginout' );
</del><span class="cx" style="display: block; padding: 0 10px">         remove_action( 'init', 'register_block_core_latest_comments' );
</span><span class="cx" style="display: block; padding: 0 10px">        remove_action( 'init', 'register_block_core_latest_posts' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        remove_action( 'init', 'register_block_core_legacy_widget' );
+       remove_action( 'init', 'register_block_core_loginout' );
+       remove_action( 'init', 'register_block_core_navigation' );
+       remove_action( 'init', 'register_block_core_navigation_area' );
+       remove_action( 'init', 'register_block_core_navigation_link' );
+       remove_action( 'init', 'register_block_core_navigation_submenu' );
</ins><span class="cx" style="display: block; padding: 0 10px">         remove_action( 'init', 'register_block_core_page_list' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        remove_action( 'init', 'register_block_core_pattern' );
</ins><span class="cx" style="display: block; padding: 0 10px">         remove_action( 'init', 'register_block_core_post_author' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        remove_action( 'init', 'register_block_core_post_comments' );
</ins><span class="cx" style="display: block; padding: 0 10px">         remove_action( 'init', 'register_block_core_post_content' );
</span><span class="cx" style="display: block; padding: 0 10px">        remove_action( 'init', 'register_block_core_post_date' );
</span><span class="cx" style="display: block; padding: 0 10px">        remove_action( 'init', 'register_block_core_post_excerpt' );
</span><span class="cx" style="display: block; padding: 0 10px">        remove_action( 'init', 'register_block_core_post_featured_image' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        remove_action( 'init', 'register_block_core_post_navigation_link' );
+       remove_action( 'init', 'register_block_core_post_template' );
</ins><span class="cx" style="display: block; padding: 0 10px">         remove_action( 'init', 'register_block_core_post_terms' );
</span><span class="cx" style="display: block; padding: 0 10px">        remove_action( 'init', 'register_block_core_post_title' );
</span><span class="cx" style="display: block; padding: 0 10px">        remove_action( 'init', 'register_block_core_query' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        remove_action( 'init', 'register_block_core_post_template' );
-       remove_action( 'init', 'gutenberg_register_legacy_query_loop_block' );
</del><span class="cx" style="display: block; padding: 0 10px">         remove_action( 'init', 'register_block_core_query_pagination' );
</span><span class="cx" style="display: block; padding: 0 10px">        remove_action( 'init', 'register_block_core_query_pagination_next' );
</span><span class="cx" style="display: block; padding: 0 10px">        remove_action( 'init', 'register_block_core_query_pagination_numbers' );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -329,14 +336,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">        remove_action( 'init', 'register_block_core_rss' );
</span><span class="cx" style="display: block; padding: 0 10px">        remove_action( 'init', 'register_block_core_search' );
</span><span class="cx" style="display: block; padding: 0 10px">        remove_action( 'init', 'register_block_core_shortcode' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        remove_action( 'init', 'register_block_core_site_logo' );
</ins><span class="cx" style="display: block; padding: 0 10px">         remove_action( 'init', 'register_block_core_site_tagline' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        remove_action( 'init', 'register_block_core_site_logo' );
</del><span class="cx" style="display: block; padding: 0 10px">         remove_action( 'init', 'register_block_core_site_title' );
</span><span class="cx" style="display: block; padding: 0 10px">        remove_action( 'init', 'register_block_core_social_link' );
</span><span class="cx" style="display: block; padding: 0 10px">        remove_action( 'init', 'register_block_core_social_link' );
</span><span class="cx" style="display: block; padding: 0 10px">        remove_action( 'init', 'register_block_core_tag_cloud' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        remove_action( 'init', 'register_block_core_template_part' );
+       remove_action( 'init', 'register_block_core_term_description' );
</ins><span class="cx" style="display: block; padding: 0 10px">         remove_action( 'init', 'register_core_block_types_from_metadata' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        remove_action( 'init', 'register_block_core_legacy_widget' );
-       remove_action( 'init', 'register_block_core_template_part' );
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> tests_add_filter( 'init', '_unhook_block_registration', 1000 );
</span></span></pre></div>
<a id="trunktestsphpunittestsblocksupportscolorsphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/phpunit/tests/block-supports/colors.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/block-supports/colors.php                               (rev 0)
+++ trunk/tests/phpunit/tests/block-supports/colors.php 2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,47 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * @group block-supports
+ */
+class WP_Block_Supports_Colors_Test extends WP_UnitTestCase {
+
+       function test_color_slugs_with_numbers_are_kebab_cased_properly() {
+               register_block_type(
+                       'test/color-slug-with-numbers',
+                       array(
+                               'api_version' => 2,
+                               'attributes'  => array(
+                                       'textColor'       => array(
+                                               'type' => 'string',
+                                       ),
+                                       'backgroundColor' => array(
+                                               'type' => 'string',
+                                       ),
+                                       'gradient'        => array(
+                                               'type' => 'string',
+                                       ),
+                               ),
+                               'supports'    => array(
+                                       'color' => array(
+                                               'text'       => true,
+                                               'background' => true,
+                                               'gradients'  => true,
+                                       ),
+                               ),
+                       )
+               );
+               $registry   = WP_Block_Type_Registry::get_instance();
+               $block_type = $registry->get_registered( 'test/color-slug-with-numbers' );
+
+               $block_atts = array(
+                       'textColor'       => 'fg1',
+                       'backgroundColor' => 'bg2',
+                       'gradient'        => 'gr3',
+               );
+
+               $actual   = wp_apply_colors_support( $block_type, $block_atts );
+               $expected = array( 'class' => 'has-text-color has-fg-1-color has-background has-bg-2-background-color has-background has-gr-3-gradient-background' );
+
+               $this->assertSame( $expected, $actual );
+               unregister_block_type( 'test/color-slug-with-numbers' );
+       }
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/phpunit/tests/block-supports/colors.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsphpunittestsblocksupportselementsphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/phpunit/tests/block-supports/elements.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/block-supports/elements.php                             (rev 0)
+++ trunk/tests/phpunit/tests/block-supports/elements.php       2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,104 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * @group block-supports
+ */
+class WP_Block_Supports_Elements_Test extends WP_UnitTestCase {
+       /**
+        * Given a string containing a class prefixed by "wp-elements-" followed by a unique id,
+        * this function returns a string where the id is one instead of being unique.
+        *
+        * @param  string $string String containing unique id classes.
+        * @return string                String where the unique id classes were replaced with "wp-elements-1".
+        */
+       private static function make_unique_id_one( $string ) {
+               return preg_replace( '/wp-elements-.{13}/', 'wp-elements-1', $string );
+       }
+
+       /**
+        * Test wp_render_elements_support() with a simple paragraph and link color preset.
+        */
+       public function test_simple_paragraph_link_color() {
+               $result = self::make_unique_id_one(
+                       wp_render_elements_support(
+                               '<p>Hello <a href="http://www.wordpress.org/">WordPress</a>!</p>',
+                               array(
+                                       'blockName' => 'core/paragraph',
+                                       'attrs'     => array(
+                                               'style' => array(
+                                                       'elements' => array(
+                                                               'link' => array(
+                                                                       'color' => array(
+                                                                               'text' => 'var:preset|color|subtle-background',
+                                                                       ),
+                                                               ),
+                                                       ),
+                                               ),
+                                       ),
+                               )
+                       )
+               );
+               $this->assertSame(
+                       $result,
+                       '<p class="wp-elements-1">Hello <a href="http://www.wordpress.org/">WordPress</a>!</p>'
+               );
+       }
+
+       /**
+        * Test wp_render_elements_support() with a paragraph containing a class.
+        */
+       public function test_class_paragraph_link_color() {
+               $result = self::make_unique_id_one(
+                       wp_render_elements_support(
+                               '<p class="has-dark-gray-background-color has-background">Hello <a href="http://www.wordpress.org/">WordPress</a>!</p>',
+                               array(
+                                       'blockName' => 'core/paragraph',
+                                       'attrs'     => array(
+                                               'style'           => array(
+                                                       'elements' => array(
+                                                               'link' => array(
+                                                                       'color' => array(
+                                                                               'text' => 'red',
+                                                                       ),
+                                                               ),
+                                                       ),
+                                               ),
+                                               'backgroundColor' => 'dark-gray',
+                                       ),
+                               )
+                       )
+               );
+               $this->assertSame(
+                       $result,
+                       '<p class="wp-elements-1 has-dark-gray-background-color has-background">Hello <a href="http://www.wordpress.org/">WordPress</a>!</p>'
+               );
+       }
+
+       /**
+        * Test wp_render_elements_support() with a paragraph containing a anchor.
+        */
+       public function test_anchor_paragraph_link_color() {
+               $result = self::make_unique_id_one(
+                       wp_render_elements_support(
+                               '<p id="anchor">Hello <a href="http://www.wordpress.org/">WordPress</a>!</p>',
+                               array(
+                                       'blockName' => 'core/paragraph',
+                                       'attrs'     => array(
+                                               'style' => array(
+                                                       'elements' => array(
+                                                               'link' => array(
+                                                                       'color' => array(
+                                                                               'text' => '#fff000',
+                                                                       ),
+                                                               ),
+                                                       ),
+                                               ),
+                                       ),
+                               )
+                       )
+               );
+               $this->assertSame(
+                       $result,
+                       '<p id="anchor" class="wp-elements-1">Hello <a href="http://www.wordpress.org/">WordPress</a>!</p>'
+               );
+       }
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/phpunit/tests/block-supports/elements.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsphpunittestsblocksupportsspacingphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/phpunit/tests/block-supports/spacing.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/block-supports/spacing.php                              (rev 0)
+++ trunk/tests/phpunit/tests/block-supports/spacing.php        2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,138 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * @group block-supports
+ */
+class WP_Block_Supports_Spacing_Test extends WP_UnitTestCase {
+       private $sample_block_content = '<div class="wp-block-test-block">Test</div>';
+       private $test_gap_block_value = array();
+       private $test_gap_block_args  = array();
+
+       function set_up() {
+               parent::set_up();
+
+               $this->test_gap_block_value = array(
+                       'blockName' => 'test/test-block',
+                       'attrs'     => array(
+                               'style' => array(
+                                       'spacing' => array(
+                                               'blockGap' => '3em',
+                                       ),
+                               ),
+                       ),
+               );
+
+               $this->test_gap_block_args = array(
+                       'api_version' => 2,
+                       'supports'    => array(
+                               'spacing' => array(
+                                       'blockGap' => true,
+                               ),
+                       ),
+               );
+       }
+
+       function tear_down() {
+               unregister_block_type( 'test/test-block' );
+
+               parent::tear_down();
+       }
+
+       function test_spacing_gap_block_support_renders_block_inline_style() {
+               register_block_type( 'test/test-block', $this->test_gap_block_args );
+               $render_output = wp_render_spacing_gap_support(
+                       $this->sample_block_content,
+                       $this->test_gap_block_value
+               );
+
+               $this->assertSame(
+                       '<div style="--wp--style--block-gap: 3em" class="wp-block-test-block">Test</div>',
+                       $render_output
+               );
+       }
+
+       function test_spacing_gap_block_support_renders_block_inline_style_with_inner_tag() {
+               register_block_type( 'test/test-block', $this->test_gap_block_args );
+               $render_output = wp_render_spacing_gap_support(
+                       '<div class="wp-test-block"><p style="color: red;">Test</p></div>',
+                       $this->test_gap_block_value
+               );
+
+               $this->assertSame(
+                       '<div style="--wp--style--block-gap: 3em" class="wp-test-block"><p style="color: red;">Test</p></div>',
+                       $render_output
+               );
+       }
+
+       function test_spacing_gap_block_support_renders_block_inline_style_with_no_other_attributes() {
+               register_block_type( 'test/test-block', $this->test_gap_block_args );
+               $render_output = wp_render_spacing_gap_support(
+                       '<div><p>Test</p></div>',
+                       $this->test_gap_block_value
+               );
+
+               $this->assertSame(
+                       '<div style="--wp--style--block-gap: 3em"><p>Test</p></div>',
+                       $render_output
+               );
+       }
+
+       function test_spacing_gap_block_support_renders_appended_block_inline_style() {
+               register_block_type( 'test/test-block', $this->test_gap_block_args );
+               $render_output = wp_render_spacing_gap_support(
+                       '<div class="wp-test-block" style="background: green;"><p style="color: red;">Test</p></div>',
+                       $this->test_gap_block_value
+               );
+
+               $this->assertSame(
+                       '<div class="wp-test-block" style="--wp--style--block-gap: 3em; background: green;"><p style="color: red;">Test</p></div>',
+                       $render_output
+               );
+       }
+
+       function test_spacing_gap_block_support_does_not_render_style_when_support_is_false() {
+               $this->test_gap_block_args['supports']['spacing']['blockGap'] = false;
+
+               register_block_type( 'test/test-block', $this->test_gap_block_args );
+               $render_output = wp_render_spacing_gap_support(
+                       $this->sample_block_content,
+                       $this->test_gap_block_value
+               );
+
+               $this->assertEquals(
+                       $this->sample_block_content,
+                       $render_output
+               );
+       }
+
+       function test_spacing_gap_block_support_does_not_render_style_when_gap_is_null() {
+               $this->test_gap_block_value['attrs']['style']['spacing']['blockGap'] = null;
+               $this->test_gap_block_args['supports']['spacing']['blockGap']        = true;
+
+               register_block_type( 'test/test-block', $this->test_gap_block_args );
+               $render_output = wp_render_spacing_gap_support(
+                       $this->sample_block_content,
+                       $this->test_gap_block_value
+               );
+
+               $this->assertEquals(
+                       $this->sample_block_content,
+                       $render_output
+               );
+       }
+
+       function test_spacing_gap_block_support_does_not_render_style_when_gap_is_illegal_value() {
+               $this->test_gap_block_value['attrs']['style']['spacing']['blockGap'] = '" javascript="alert("hello");';
+               $this->test_gap_block_args['supports']['spacing']['blockGap']        = true;
+
+               register_block_type( 'test/test-block', $this->test_gap_block_args );
+               $render_output = wp_render_spacing_gap_support(
+                       $this->sample_block_content,
+                       $this->test_gap_block_value
+               );
+
+               $this->assertEquals(
+                       $this->sample_block_content,
+                       $render_output
+               );
+       }
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/phpunit/tests/block-supports/spacing.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsphpunittestsblocksupportstypographyphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/phpunit/tests/block-supports/typography.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/block-supports/typography.php                           (rev 0)
+++ trunk/tests/phpunit/tests/block-supports/typography.php     2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,123 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * @group block-supports
+ */
+class WP_Block_Supports_Typography_Test extends WP_UnitTestCase {
+
+       function test_font_size_slug_with_numbers_is_kebab_cased_properly() {
+               register_block_type(
+                       'test/font-size-slug-with-numbers',
+                       array(
+                               'api_version' => 2,
+                               'attributes'  => array(
+                                       'fontSize' => array(
+                                               'type' => 'string',
+                                       ),
+                               ),
+                               'supports'    => array(
+                                       'typography' => array(
+                                               'fontSize' => true,
+                                       ),
+                               ),
+                       )
+               );
+               $registry   = WP_Block_Type_Registry::get_instance();
+               $block_type = $registry->get_registered( 'test/font-size-slug-with-numbers' );
+
+               $block_atts = array( 'fontSize' => 'h1' );
+
+               $actual   = wp_apply_typography_support( $block_type, $block_atts );
+               $expected = array( 'class' => 'has-h-1-font-size' );
+
+               $this->assertSame( $expected, $actual );
+               unregister_block_type( 'test/font-size-slug-with-numbers' );
+       }
+
+       function test_font_family_with_legacy_inline_styles_using_a_value() {
+               $block_name = 'test/font-family-with-inline-styles-using-value';
+               register_block_type(
+                       $block_name,
+                       array(
+                               'api_version' => 2,
+                               'attributes'  => array(
+                                       'style' => array(
+                                               'type' => 'object',
+                                       ),
+                               ),
+                               'supports'    => array(
+                                       'typography' => array(
+                                               '__experimentalFontFamily' => true,
+                                       ),
+                               ),
+                       )
+               );
+               $registry   = WP_Block_Type_Registry::get_instance();
+               $block_type = $registry->get_registered( $block_name );
+               $block_atts = array( 'style' => array( 'typography' => array( 'fontFamily' => 'serif' ) ) );
+
+               $actual   = wp_apply_typography_support( $block_type, $block_atts );
+               $expected = array( 'style' => 'font-family: serif;' );
+
+               $this->assertSame( $expected, $actual );
+               unregister_block_type( $block_name );
+       }
+
+       function test_font_family_with_legacy_inline_styles_using_a_css_var() {
+               $block_name = 'test/font-family-with-inline-styles-using-css-var';
+               register_block_type(
+                       $block_name,
+                       array(
+                               'api_version' => 2,
+                               'attributes'  => array(
+                                       'style' => array(
+                                               'type' => 'object',
+                                       ),
+                               ),
+                               'supports'    => array(
+                                       'typography' => array(
+                                               '__experimentalFontFamily' => true,
+                                       ),
+                               ),
+                       )
+               );
+               $registry   = WP_Block_Type_Registry::get_instance();
+               $block_type = $registry->get_registered( $block_name );
+               $block_atts = array( 'style' => array( 'typography' => array( 'fontFamily' => 'var:preset|font-family|h1' ) ) );
+
+               $actual   = wp_apply_typography_support( $block_type, $block_atts );
+               $expected = array( 'style' => 'font-family: var(--wp--preset--font-family--h-1);' );
+
+               $this->assertSame( $expected, $actual );
+               unregister_block_type( $block_name );
+       }
+
+       function test_font_family_with_class() {
+               $block_name = 'test/font-family-with-class';
+               register_block_type(
+                       $block_name,
+                       array(
+                               'api_version' => 2,
+                               'attributes'  => array(
+                                       'style' => array(
+                                               'type' => 'object',
+                                       ),
+                               ),
+                               'supports'    => array(
+                                       'typography' => array(
+                                               '__experimentalFontFamily' => true,
+                                       ),
+                               ),
+                       )
+               );
+               $registry   = WP_Block_Type_Registry::get_instance();
+               $block_type = $registry->get_registered( $block_name );
+               $block_atts = array( 'fontFamily' => 'h1' );
+
+               $actual   = wp_apply_typography_support( $block_type, $block_atts );
+               $expected = array( 'class' => 'has-h-1-font-family' );
+
+               $this->assertSame( $expected, $actual );
+               unregister_block_type( $block_name );
+       }
+
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/phpunit/tests/block-supports/typography.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsphpunittestsblocktemplateutilsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/tests/block-template-utils.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/block-template-utils.php        2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/tests/phpunit/tests/block-template-utils.php  2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -75,7 +75,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                wp_delete_post( self::$post->ID );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function test_build_template_result_from_post() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function test_build_block_template_result_from_post() {
</ins><span class="cx" style="display: block; padding: 0 10px">                 $template = _build_block_template_result_from_post(
</span><span class="cx" style="display: block; padding: 0 10px">                        self::$post,
</span><span class="cx" style="display: block; padding: 0 10px">                        'wp_template'
</span></span></pre></div>
<a id="trunktestsphpunittestsrestapirestschemasetupphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/tests/rest-api/rest-schema-setup.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/rest-api/rest-schema-setup.php  2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/tests/phpunit/tests/rest-api/rest-schema-setup.php    2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -154,8 +154,15 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        '/wp/v2/widget-types',
</span><span class="cx" style="display: block; padding: 0 10px">                        '/wp/v2/widget-types/(?P<id>[a-zA-Z0-9_-]+)',
</span><span class="cx" style="display: block; padding: 0 10px">                        '/wp/v2/widget-types/(?P<id>[a-zA-Z0-9_-]+)/encode',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        '/wp/v2/widget-types/(?P<id>[a-zA-Z0-9_-]+)/render',
</ins><span class="cx" style="display: block; padding: 0 10px">                         '/wp/v2/widgets',
</span><span class="cx" style="display: block; padding: 0 10px">                        '/wp/v2/widgets/(?P<id>[\w\-]+)',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        '/wp/v2/navigation',
+                       '/wp/v2/navigation/(?P<id>[\d]+)',
+                       '/wp/v2/navigation/(?P<id>[\d]+)/autosaves',
+                       '/wp/v2/navigation/(?P<parent>[\d]+)/autosaves/(?P<id>[\d]+)',
+                       '/wp/v2/navigation/(?P<parent>[\d]+)/revisions',
+                       '/wp/v2/navigation/(?P<parent>[\d]+)/revisions/(?P<id>[\d]+)',
</ins><span class="cx" style="display: block; padding: 0 10px">                         '/wp-site-health/v1',
</span><span class="cx" style="display: block; padding: 0 10px">                        '/wp-site-health/v1/tests/background-updates',
</span><span class="cx" style="display: block; padding: 0 10px">                        '/wp-site-health/v1/tests/loopback-requests',
</span></span></pre></div>
<a id="trunktestsphpunittestsrestapirestuserscontrollerphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/tests/rest-api/rest-users-controller.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/rest-api/rest-users-controller.php      2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/tests/phpunit/tests/rest-api/rest-users-controller.php        2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -207,6 +207,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                'search',
</span><span class="cx" style="display: block; padding: 0 10px">                                'slug',
</span><span class="cx" style="display: block; padding: 0 10px">                                'who',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                'has_published_posts',
</ins><span class="cx" style="display: block; padding: 0 10px">                         ),
</span><span class="cx" style="display: block; padding: 0 10px">                        $keys
</span><span class="cx" style="display: block; padding: 0 10px">                );
</span></span></pre></div>
<a id="trunktestsqunitfixtureswpapigeneratedjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/fixtures/wp-api-generated.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/fixtures/wp-api-generated.js    2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/tests/qunit/fixtures/wp-api-generated.js      2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -5115,6 +5115,814 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px">             ]
</span><span class="cx" style="display: block; padding: 0 10px">         },
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        "/wp/v2/navigation": {
+            "namespace": "wp/v2",
+            "methods": [
+                "GET",
+                "POST"
+            ],
+            "endpoints": [
+                {
+                    "methods": [
+                        "GET"
+                    ],
+                    "args": {
+                        "context": {
+                            "description": "Scope under which the request is made; determines fields present in response.",
+                            "type": "string",
+                            "enum": [
+                                "view",
+                                "embed",
+                                "edit"
+                            ],
+                            "default": "view",
+                            "required": false
+                        },
+                        "page": {
+                            "description": "Current page of the collection.",
+                            "type": "integer",
+                            "default": 1,
+                            "minimum": 1,
+                            "required": false
+                        },
+                        "per_page": {
+                            "description": "Maximum number of items to be returned in result set.",
+                            "type": "integer",
+                            "default": 10,
+                            "minimum": 1,
+                            "maximum": 100,
+                            "required": false
+                        },
+                        "search": {
+                            "description": "Limit results to those matching a string.",
+                            "type": "string",
+                            "required": false
+                        },
+                        "after": {
+                            "description": "Limit response to posts published after a given ISO8601 compliant date.",
+                            "type": "string",
+                            "format": "date-time",
+                            "required": false
+                        },
+                        "modified_after": {
+                            "description": "Limit response to posts modified after a given ISO8601 compliant date.",
+                            "type": "string",
+                            "format": "date-time",
+                            "required": false
+                        },
+                        "before": {
+                            "description": "Limit response to posts published before a given ISO8601 compliant date.",
+                            "type": "string",
+                            "format": "date-time",
+                            "required": false
+                        },
+                        "modified_before": {
+                            "description": "Limit response to posts modified before a given ISO8601 compliant date.",
+                            "type": "string",
+                            "format": "date-time",
+                            "required": false
+                        },
+                        "exclude": {
+                            "description": "Ensure result set excludes specific IDs.",
+                            "type": "array",
+                            "items": {
+                                "type": "integer"
+                            },
+                            "default": [],
+                            "required": false
+                        },
+                        "include": {
+                            "description": "Limit result set to specific IDs.",
+                            "type": "array",
+                            "items": {
+                                "type": "integer"
+                            },
+                            "default": [],
+                            "required": false
+                        },
+                        "offset": {
+                            "description": "Offset the result set by a specific number of items.",
+                            "type": "integer",
+                            "required": false
+                        },
+                        "order": {
+                            "description": "Order sort attribute ascending or descending.",
+                            "type": "string",
+                            "default": "desc",
+                            "enum": [
+                                "asc",
+                                "desc"
+                            ],
+                            "required": false
+                        },
+                        "orderby": {
+                            "description": "Sort collection by post attribute.",
+                            "type": "string",
+                            "default": "date",
+                            "enum": [
+                                "author",
+                                "date",
+                                "id",
+                                "include",
+                                "modified",
+                                "parent",
+                                "relevance",
+                                "slug",
+                                "include_slugs",
+                                "title"
+                            ],
+                            "required": false
+                        },
+                        "slug": {
+                            "description": "Limit result set to posts with one or more specific slugs.",
+                            "type": "array",
+                            "items": {
+                                "type": "string"
+                            },
+                            "required": false
+                        },
+                        "status": {
+                            "default": "publish",
+                            "description": "Limit result set to posts assigned one or more statuses.",
+                            "type": "array",
+                            "items": {
+                                "enum": [
+                                    "publish",
+                                    "future",
+                                    "draft",
+                                    "pending",
+                                    "private",
+                                    "trash",
+                                    "auto-draft",
+                                    "inherit",
+                                    "request-pending",
+                                    "request-confirmed",
+                                    "request-failed",
+                                    "request-completed",
+                                    "any"
+                                ],
+                                "type": "string"
+                            },
+                            "required": false
+                        }
+                    }
+                },
+                {
+                    "methods": [
+                        "POST"
+                    ],
+                    "args": {
+                        "date": {
+                            "description": "The date the post was published, in the site's timezone.",
+                            "type": [
+                                "string",
+                                "null"
+                            ],
+                            "format": "date-time",
+                            "required": false
+                        },
+                        "date_gmt": {
+                            "description": "The date the post was published, as GMT.",
+                            "type": [
+                                "string",
+                                "null"
+                            ],
+                            "format": "date-time",
+                            "required": false
+                        },
+                        "slug": {
+                            "description": "An alphanumeric identifier for the post unique to its type.",
+                            "type": "string",
+                            "required": false
+                        },
+                        "status": {
+                            "description": "A named status for the post.",
+                            "type": "string",
+                            "enum": [
+                                "publish",
+                                "future",
+                                "draft",
+                                "pending",
+                                "private"
+                            ],
+                            "required": false
+                        },
+                        "password": {
+                            "description": "A password to protect access to the content and excerpt.",
+                            "type": "string",
+                            "required": false
+                        },
+                        "title": {
+                            "description": "The title for the post.",
+                            "type": "object",
+                            "properties": {
+                                "raw": {
+                                    "description": "Title for the post, as it exists in the database.",
+                                    "type": "string",
+                                    "context": [
+                                        "edit"
+                                    ]
+                                },
+                                "rendered": {
+                                    "description": "HTML title for the post, transformed for display.",
+                                    "type": "string",
+                                    "context": [
+                                        "view",
+                                        "edit",
+                                        "embed"
+                                    ],
+                                    "readonly": true
+                                }
+                            },
+                            "required": false
+                        },
+                        "content": {
+                            "description": "The content for the post.",
+                            "type": "object",
+                            "properties": {
+                                "raw": {
+                                    "description": "Content for the post, as it exists in the database.",
+                                    "type": "string",
+                                    "context": [
+                                        "edit"
+                                    ]
+                                },
+                                "rendered": {
+                                    "description": "HTML content for the post, transformed for display.",
+                                    "type": "string",
+                                    "context": [
+                                        "view",
+                                        "edit"
+                                    ],
+                                    "readonly": true
+                                },
+                                "block_version": {
+                                    "description": "Version of the content block format used by the post.",
+                                    "type": "integer",
+                                    "context": [
+                                        "edit"
+                                    ],
+                                    "readonly": true
+                                },
+                                "protected": {
+                                    "description": "Whether the content is protected with a password.",
+                                    "type": "boolean",
+                                    "context": [
+                                        "view",
+                                        "edit",
+                                        "embed"
+                                    ],
+                                    "readonly": true
+                                }
+                            },
+                            "required": false
+                        },
+                        "template": {
+                            "description": "The theme file to use to display the post.",
+                            "type": "string",
+                            "required": false
+                        }
+                    }
+                }
+            ],
+            "_links": {
+                "self": [
+                    {
+                        "href": "http://example.org/index.php?rest_route=/wp/v2/navigation"
+                    }
+                ]
+            }
+        },
+        "/wp/v2/navigation/(?P<id>[\\d]+)": {
+            "namespace": "wp/v2",
+            "methods": [
+                "GET",
+                "POST",
+                "PUT",
+                "PATCH",
+                "DELETE"
+            ],
+            "endpoints": [
+                {
+                    "methods": [
+                        "GET"
+                    ],
+                    "args": {
+                        "id": {
+                            "description": "Unique identifier for the post.",
+                            "type": "integer",
+                            "required": false
+                        },
+                        "context": {
+                            "description": "Scope under which the request is made; determines fields present in response.",
+                            "type": "string",
+                            "enum": [
+                                "view",
+                                "embed",
+                                "edit"
+                            ],
+                            "default": "view",
+                            "required": false
+                        },
+                        "password": {
+                            "description": "The password for the post if it is password protected.",
+                            "type": "string",
+                            "required": false
+                        }
+                    }
+                },
+                {
+                    "methods": [
+                        "POST",
+                        "PUT",
+                        "PATCH"
+                    ],
+                    "args": {
+                        "id": {
+                            "description": "Unique identifier for the post.",
+                            "type": "integer",
+                            "required": false
+                        },
+                        "date": {
+                            "description": "The date the post was published, in the site's timezone.",
+                            "type": [
+                                "string",
+                                "null"
+                            ],
+                            "format": "date-time",
+                            "required": false
+                        },
+                        "date_gmt": {
+                            "description": "The date the post was published, as GMT.",
+                            "type": [
+                                "string",
+                                "null"
+                            ],
+                            "format": "date-time",
+                            "required": false
+                        },
+                        "slug": {
+                            "description": "An alphanumeric identifier for the post unique to its type.",
+                            "type": "string",
+                            "required": false
+                        },
+                        "status": {
+                            "description": "A named status for the post.",
+                            "type": "string",
+                            "enum": [
+                                "publish",
+                                "future",
+                                "draft",
+                                "pending",
+                                "private"
+                            ],
+                            "required": false
+                        },
+                        "password": {
+                            "description": "A password to protect access to the content and excerpt.",
+                            "type": "string",
+                            "required": false
+                        },
+                        "title": {
+                            "description": "The title for the post.",
+                            "type": "object",
+                            "properties": {
+                                "raw": {
+                                    "description": "Title for the post, as it exists in the database.",
+                                    "type": "string",
+                                    "context": [
+                                        "edit"
+                                    ]
+                                },
+                                "rendered": {
+                                    "description": "HTML title for the post, transformed for display.",
+                                    "type": "string",
+                                    "context": [
+                                        "view",
+                                        "edit",
+                                        "embed"
+                                    ],
+                                    "readonly": true
+                                }
+                            },
+                            "required": false
+                        },
+                        "content": {
+                            "description": "The content for the post.",
+                            "type": "object",
+                            "properties": {
+                                "raw": {
+                                    "description": "Content for the post, as it exists in the database.",
+                                    "type": "string",
+                                    "context": [
+                                        "edit"
+                                    ]
+                                },
+                                "rendered": {
+                                    "description": "HTML content for the post, transformed for display.",
+                                    "type": "string",
+                                    "context": [
+                                        "view",
+                                        "edit"
+                                    ],
+                                    "readonly": true
+                                },
+                                "block_version": {
+                                    "description": "Version of the content block format used by the post.",
+                                    "type": "integer",
+                                    "context": [
+                                        "edit"
+                                    ],
+                                    "readonly": true
+                                },
+                                "protected": {
+                                    "description": "Whether the content is protected with a password.",
+                                    "type": "boolean",
+                                    "context": [
+                                        "view",
+                                        "edit",
+                                        "embed"
+                                    ],
+                                    "readonly": true
+                                }
+                            },
+                            "required": false
+                        },
+                        "template": {
+                            "description": "The theme file to use to display the post.",
+                            "type": "string",
+                            "required": false
+                        }
+                    }
+                },
+                {
+                    "methods": [
+                        "DELETE"
+                    ],
+                    "args": {
+                        "id": {
+                            "description": "Unique identifier for the post.",
+                            "type": "integer",
+                            "required": false
+                        },
+                        "force": {
+                            "type": "boolean",
+                            "default": false,
+                            "description": "Whether to bypass Trash and force deletion.",
+                            "required": false
+                        }
+                    }
+                }
+            ]
+        },
+        "/wp/v2/navigation/(?P<parent>[\\d]+)/revisions": {
+            "namespace": "wp/v2",
+            "methods": [
+                "GET"
+            ],
+            "endpoints": [
+                {
+                    "methods": [
+                        "GET"
+                    ],
+                    "args": {
+                        "parent": {
+                            "description": "The ID for the parent of the revision.",
+                            "type": "integer",
+                            "required": false
+                        },
+                        "context": {
+                            "description": "Scope under which the request is made; determines fields present in response.",
+                            "type": "string",
+                            "enum": [
+                                "view",
+                                "embed",
+                                "edit"
+                            ],
+                            "default": "view",
+                            "required": false
+                        },
+                        "page": {
+                            "description": "Current page of the collection.",
+                            "type": "integer",
+                            "default": 1,
+                            "minimum": 1,
+                            "required": false
+                        },
+                        "per_page": {
+                            "description": "Maximum number of items to be returned in result set.",
+                            "type": "integer",
+                            "minimum": 1,
+                            "maximum": 100,
+                            "required": false
+                        },
+                        "search": {
+                            "description": "Limit results to those matching a string.",
+                            "type": "string",
+                            "required": false
+                        },
+                        "exclude": {
+                            "description": "Ensure result set excludes specific IDs.",
+                            "type": "array",
+                            "items": {
+                                "type": "integer"
+                            },
+                            "default": [],
+                            "required": false
+                        },
+                        "include": {
+                            "description": "Limit result set to specific IDs.",
+                            "type": "array",
+                            "items": {
+                                "type": "integer"
+                            },
+                            "default": [],
+                            "required": false
+                        },
+                        "offset": {
+                            "description": "Offset the result set by a specific number of items.",
+                            "type": "integer",
+                            "required": false
+                        },
+                        "order": {
+                            "description": "Order sort attribute ascending or descending.",
+                            "type": "string",
+                            "default": "desc",
+                            "enum": [
+                                "asc",
+                                "desc"
+                            ],
+                            "required": false
+                        },
+                        "orderby": {
+                            "description": "Sort collection by object attribute.",
+                            "type": "string",
+                            "default": "date",
+                            "enum": [
+                                "date",
+                                "id",
+                                "include",
+                                "relevance",
+                                "slug",
+                                "include_slugs",
+                                "title"
+                            ],
+                            "required": false
+                        }
+                    }
+                }
+            ]
+        },
+        "/wp/v2/navigation/(?P<parent>[\\d]+)/revisions/(?P<id>[\\d]+)": {
+            "namespace": "wp/v2",
+            "methods": [
+                "GET",
+                "DELETE"
+            ],
+            "endpoints": [
+                {
+                    "methods": [
+                        "GET"
+                    ],
+                    "args": {
+                        "parent": {
+                            "description": "The ID for the parent of the revision.",
+                            "type": "integer",
+                            "required": false
+                        },
+                        "id": {
+                            "description": "Unique identifier for the revision.",
+                            "type": "integer",
+                            "required": false
+                        },
+                        "context": {
+                            "description": "Scope under which the request is made; determines fields present in response.",
+                            "type": "string",
+                            "enum": [
+                                "view",
+                                "embed",
+                                "edit"
+                            ],
+                            "default": "view",
+                            "required": false
+                        }
+                    }
+                },
+                {
+                    "methods": [
+                        "DELETE"
+                    ],
+                    "args": {
+                        "parent": {
+                            "description": "The ID for the parent of the revision.",
+                            "type": "integer",
+                            "required": false
+                        },
+                        "id": {
+                            "description": "Unique identifier for the revision.",
+                            "type": "integer",
+                            "required": false
+                        },
+                        "force": {
+                            "type": "boolean",
+                            "default": false,
+                            "description": "Required to be true, as revisions do not support trashing.",
+                            "required": false
+                        }
+                    }
+                }
+            ]
+        },
+        "/wp/v2/navigation/(?P<id>[\\d]+)/autosaves": {
+            "namespace": "wp/v2",
+            "methods": [
+                "GET",
+                "POST"
+            ],
+            "endpoints": [
+                {
+                    "methods": [
+                        "GET"
+                    ],
+                    "args": {
+                        "parent": {
+                            "description": "The ID for the parent of the autosave.",
+                            "type": "integer",
+                            "required": false
+                        },
+                        "context": {
+                            "description": "Scope under which the request is made; determines fields present in response.",
+                            "type": "string",
+                            "enum": [
+                                "view",
+                                "embed",
+                                "edit"
+                            ],
+                            "default": "view",
+                            "required": false
+                        }
+                    }
+                },
+                {
+                    "methods": [
+                        "POST"
+                    ],
+                    "args": {
+                        "parent": {
+                            "description": "The ID for the parent of the autosave.",
+                            "type": "integer",
+                            "required": false
+                        },
+                        "date": {
+                            "description": "The date the post was published, in the site's timezone.",
+                            "type": [
+                                "string",
+                                "null"
+                            ],
+                            "format": "date-time",
+                            "required": false
+                        },
+                        "date_gmt": {
+                            "description": "The date the post was published, as GMT.",
+                            "type": [
+                                "string",
+                                "null"
+                            ],
+                            "format": "date-time",
+                            "required": false
+                        },
+                        "slug": {
+                            "description": "An alphanumeric identifier for the post unique to its type.",
+                            "type": "string",
+                            "required": false
+                        },
+                        "status": {
+                            "description": "A named status for the post.",
+                            "type": "string",
+                            "enum": [
+                                "publish",
+                                "future",
+                                "draft",
+                                "pending",
+                                "private"
+                            ],
+                            "required": false
+                        },
+                        "password": {
+                            "description": "A password to protect access to the content and excerpt.",
+                            "type": "string",
+                            "required": false
+                        },
+                        "title": {
+                            "description": "The title for the post.",
+                            "type": "object",
+                            "properties": {
+                                "raw": {
+                                    "description": "Title for the post, as it exists in the database.",
+                                    "type": "string",
+                                    "context": [
+                                        "edit"
+                                    ]
+                                },
+                                "rendered": {
+                                    "description": "HTML title for the post, transformed for display.",
+                                    "type": "string",
+                                    "context": [
+                                        "view",
+                                        "edit",
+                                        "embed"
+                                    ],
+                                    "readonly": true
+                                }
+                            },
+                            "required": false
+                        },
+                        "content": {
+                            "description": "The content for the post.",
+                            "type": "object",
+                            "properties": {
+                                "raw": {
+                                    "description": "Content for the post, as it exists in the database.",
+                                    "type": "string",
+                                    "context": [
+                                        "edit"
+                                    ]
+                                },
+                                "rendered": {
+                                    "description": "HTML content for the post, transformed for display.",
+                                    "type": "string",
+                                    "context": [
+                                        "view",
+                                        "edit"
+                                    ],
+                                    "readonly": true
+                                },
+                                "block_version": {
+                                    "description": "Version of the content block format used by the post.",
+                                    "type": "integer",
+                                    "context": [
+                                        "edit"
+                                    ],
+                                    "readonly": true
+                                },
+                                "protected": {
+                                    "description": "Whether the content is protected with a password.",
+                                    "type": "boolean",
+                                    "context": [
+                                        "view",
+                                        "edit",
+                                        "embed"
+                                    ],
+                                    "readonly": true
+                                }
+                            },
+                            "required": false
+                        },
+                        "template": {
+                            "description": "The theme file to use to display the post.",
+                            "type": "string",
+                            "required": false
+                        }
+                    }
+                }
+            ]
+        },
+        "/wp/v2/navigation/(?P<parent>[\\d]+)/autosaves/(?P<id>[\\d]+)": {
+            "namespace": "wp/v2",
+            "methods": [
+                "GET"
+            ],
+            "endpoints": [
+                {
+                    "methods": [
+                        "GET"
+                    ],
+                    "args": {
+                        "parent": {
+                            "description": "The ID for the parent of the autosave.",
+                            "type": "integer",
+                            "required": false
+                        },
+                        "id": {
+                            "description": "The ID for the autosave.",
+                            "type": "integer",
+                            "required": false
+                        },
+                        "context": {
+                            "description": "Scope under which the request is made; determines fields present in response.",
+                            "type": "string",
+                            "enum": [
+                                "view",
+                                "embed",
+                                "edit"
+                            ],
+                            "default": "view",
+                            "required": false
+                        }
+                    }
+                }
+            ]
+        },
</ins><span class="cx" style="display: block; padding: 0 10px">         "/wp/v2/types": {
</span><span class="cx" style="display: block; padding: 0 10px">             "namespace": "wp/v2",
</span><span class="cx" style="display: block; padding: 0 10px">             "methods": [
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -5930,6 +6738,26 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                 "authors"
</span><span class="cx" style="display: block; padding: 0 10px">                             ],
</span><span class="cx" style="display: block; padding: 0 10px">                             "required": false
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        },
+                        "has_published_posts": {
+                            "description": "Limit result set to users who have published posts.",
+                            "type": [
+                                "boolean",
+                                "array"
+                            ],
+                            "items": {
+                                "type": "string",
+                                "enum": {
+                                    "post": "post",
+                                    "page": "page",
+                                    "attachment": "attachment",
+                                    "wp_block": "wp_block",
+                                    "wp_template": "wp_template",
+                                    "wp_template_part": "wp_template_part",
+                                    "wp_navigation": "wp_navigation"
+                                }
+                            },
+                            "required": false
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px">                     }
</span><span class="cx" style="display: block; padding: 0 10px">                 },
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -7728,6 +8556,31 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px">             ]
</span><span class="cx" style="display: block; padding: 0 10px">         },
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        "/wp/v2/widget-types/(?P<id>[a-zA-Z0-9_-]+)/render": {
+            "namespace": "wp/v2",
+            "methods": [
+                "POST"
+            ],
+            "endpoints": [
+                {
+                    "methods": [
+                        "POST"
+                    ],
+                    "args": {
+                        "id": {
+                            "description": "The widget type id.",
+                            "type": "string",
+                            "required": true
+                        },
+                        "instance": {
+                            "description": "Current instance settings of the widget.",
+                            "type": "object",
+                            "required": false
+                        }
+                    }
+                }
+            ]
+        },
</ins><span class="cx" style="display: block; padding: 0 10px">         "/wp/v2/widgets": {
</span><span class="cx" style="display: block; padding: 0 10px">             "namespace": "wp/v2",
</span><span class="cx" style="display: block; padding: 0 10px">             "methods": [
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9210,6 +10063,34 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px">             ]
</span><span class="cx" style="display: block; padding: 0 10px">         }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    },
+    "wp_navigation": {
+        "description": "Navigation menus.",
+        "hierarchical": false,
+        "name": "Navigation Menus",
+        "slug": "wp_navigation",
+        "taxonomies": [],
+        "rest_base": "navigation",
+        "rest_namespace": "wp/v2",
+        "_links": {
+            "collection": [
+                {
+                    "href": "http://example.org/index.php?rest_route=/wp/v2/types"
+                }
+            ],
+            "wp:items": [
+                {
+                    "href": "http://example.org/index.php?rest_route=/wp/v2/navigation"
+                }
+            ],
+            "curies": [
+                {
+                    "name": "wp",
+                    "href": "https://api.w.org/{rel}",
+                    "templated": true
+                }
+            ]
+        }
</ins><span class="cx" style="display: block; padding: 0 10px">     }
</span><span class="cx" style="display: block; padding: 0 10px"> };
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span></span></pre></div>
<a id="trunktoolswebpackblocksjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tools/webpack/blocks.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tools/webpack/blocks.js     2021-11-09 01:57:48 UTC (rev 52068)
+++ trunk/tools/webpack/blocks.js       2021-11-09 02:15:23 UTC (rev 52069)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -31,14 +31,22 @@
</span><span class="cx" style="display: block; padding: 0 10px">                'latest-comments',
</span><span class="cx" style="display: block; padding: 0 10px">                'latest-posts',
</span><span class="cx" style="display: block; padding: 0 10px">                'loginout',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                'navigation',
+               'navigation-area',
+               'navigation-link',
+               'navigation-submenu',
</ins><span class="cx" style="display: block; padding: 0 10px">                 'page-list',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                'pattern',
+               'post-author',
+               'post-comments',
</ins><span class="cx" style="display: block; padding: 0 10px">                 'post-content',
</span><span class="cx" style="display: block; padding: 0 10px">                'post-date',
</span><span class="cx" style="display: block; padding: 0 10px">                'post-excerpt',
</span><span class="cx" style="display: block; padding: 0 10px">                'post-featured-image',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                'post-navigation-link',
+               'post-template',
</ins><span class="cx" style="display: block; padding: 0 10px">                 'post-terms',
</span><span class="cx" style="display: block; padding: 0 10px">                'post-title',
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                'post-template',
</del><span class="cx" style="display: block; padding: 0 10px">                 'query',
</span><span class="cx" style="display: block; padding: 0 10px">                'query-pagination',
</span><span class="cx" style="display: block; padding: 0 10px">                'query-pagination-next',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -54,6 +62,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                'social-link',
</span><span class="cx" style="display: block; padding: 0 10px">                'tag-cloud',
</span><span class="cx" style="display: block; padding: 0 10px">                'template-part',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                'term-description',
</ins><span class="cx" style="display: block; padding: 0 10px">         ];
</span><span class="cx" style="display: block; padding: 0 10px">        const blockFolders = [
</span><span class="cx" style="display: block; padding: 0 10px">                'audio',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -90,6 +99,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        ];
</span><span class="cx" style="display: block; padding: 0 10px">        const blockPHPFiles = {
</span><span class="cx" style="display: block; padding: 0 10px">                'widgets/src/blocks/legacy-widget/index.php': 'wp-includes/blocks/legacy-widget.php',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                'widgets/src/blocks/widget-group/index.php': 'wp-includes/blocks/widget-group.php',
</ins><span class="cx" style="display: block; padding: 0 10px">                 ...dynamicBlockFolders.reduce( ( files, blockName ) => {
</span><span class="cx" style="display: block; padding: 0 10px">                        files[ `block-library/src/${ blockName }/index.php` ] = `wp-includes/blocks/${ blockName }.php`;
</span><span class="cx" style="display: block; padding: 0 10px">                        return files;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -97,6 +107,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        };
</span><span class="cx" style="display: block; padding: 0 10px">        const blockMetadataFiles = {
</span><span class="cx" style="display: block; padding: 0 10px">                'widgets/src/blocks/legacy-widget/block.json': 'wp-includes/blocks/legacy-widget/block.json',
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                'widgets/src/blocks/widget-group/block.json': 'wp-includes/blocks/widget-group/block.json',
</ins><span class="cx" style="display: block; padding: 0 10px">                 ...blockFolders.reduce( ( files, blockName ) => {
</span><span class="cx" style="display: block; padding: 0 10px">                        files[ `block-library/src/${ blockName }/block.json` ] = `wp-includes/blocks/${ blockName }/block.json`;
</span><span class="cx" style="display: block; padding: 0 10px">                        return files;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -143,6 +154,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                mode,
</span><span class="cx" style="display: block; padding: 0 10px">                entry: {
</span><span class="cx" style="display: block; padding: 0 10px">                        'file/view': join( baseDir, `node_modules/@wordpress/block-library/build-module/file/view` ),
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        'navigation/view': join( baseDir, `node_modules/@wordpress/block-library/build-module/navigation/view` ),
</ins><span class="cx" style="display: block; padding: 0 10px">                 },
</span><span class="cx" style="display: block; padding: 0 10px">                output: {
</span><span class="cx" style="display: block; padding: 0 10px">                        devtoolNamespace: 'wp',
</span></span></pre>
</div>
</div>

</body>
</html>