diff --git a/README.md b/README.md
index 4593ab97..e7508dc6 100644
--- a/README.md
+++ b/README.md
@@ -68,3 +68,87 @@ Yes! Guest authors can be disabled entirely through a filter. Having the followi
## Change Log
[View the change log](https://github.com/Automattic/Co-Authors-Plus/blob/master/CHANGELOG.md).
+
+## Blocks
+
+### Co-Authors
+
+Use this block to create a repeating template that displays the co-authors of a post. By default it contains the Co-Author Name block, but you can add any other block you want to the template. If you choose another Co-Author block like avatar, biography or image it will automatically be supplied the author `context` that it needs. This works similarly to creating a Post Template in a Query Loop block.
+
+The Co-Authors Block supports two layouts:
+
+#### Inline Layout
+
+Use the inline layout to display co-authors in a list on a single wrapping line.
+
+You can control the characters displayed before, between and after co-authors in the list using the block settings, or change the defaults using the following server-side filters:
+
+```
+coauthors_default_before
+coauthors_default_between
+coauthors_default_between_last
+coauthors_default_after
+```
+
+#### Block Layout
+
+Use the block layout to display co-authors in a vertical stack. While using the block layout you can use block spacing settings to control the vertical space between co-authors.
+
+Then you can create your own layout using blocks like group, row or stack and it will be applied to each co-author, similar to applying a layout to each post in a query loop.
+
+### Co-Author Name
+
+This block displays a co-author's `Display Name` and optionally turns it into a link to their author archive.
+
+Using the block's advanced settings you can select which HTML element is used to output the name. This is useful in contexts such as an author archive where you might want their name to be a heading.
+
+### Co-Author Avatar
+
+Like the post author avatar, or comment author avatar, this block displays a small scale square image of a co-author and utilizes the Gravatar default avatars as configured in your site's discussion options.
+
+To customize the available sizes, use the [rest_avatar_sizes](https://developer.wordpress.org/reference/hooks/rest_avatar_sizes/) filter.
+
+### Co-Author Biography
+
+This block outputs the biographical information for a co-author based on either their user or guest author data.
+
+The content is wrapped in paragraph elements using `wpautop` and is escaped using `wp_kses_post`.
+
+### Co-Author Featured Image
+
+This block requires the use of Guest Authors. Because guest author avatars are uploaded to the WordPress media library, there are more options for displaying these images.
+
+This block utilizes the image sizes configured in your theme and your site's media settings to present a guest author's avatar at a larger scale or higher resolution. It does not support Gravatars.
+
+## Block Context
+
+### Post, Page, Query Loop
+
+By default, all blocks receive the post context. The job of the Co-Authors Block is to use this context to find the relevant authors and provide context to its inner blocks.
+
+### Author Archive
+
+If you want to display data about the author on their own archive, use the individual co-author blocks directly without wrapping them in the Co-Authors Block. During requests for an author archive the correct context is derived from the `author_name` query variable and provided to all blocks that declare their use of the context `co-authors-plus/author`.
+
+### Extending
+
+If you make a custom block and want to use the author context, add `co-authors-plus/author` to the `usesContext` property in your block.json file.
+
+Example:
+```json
+{
+ "usesContext": ["co-authors-plus/author"]
+}
+```
+
+## Block Example Data
+
+When working with Full Site Editing, or in the post editor before the authors are loaded, example data is used. The example data provided with the co-author blocks resembles a response to the `/coauthors/v1/coauthors/:user-nicename` REST API endpoint.
+
+### Extending
+
+If you have written a plugin that modifies the REST API response, you can similarly modify the example data either on the server-side using the filter `coauthors_blocks_store_data` or the client-side using the filter `co-authors-plus.author-placeholder`.
+
+## Block Non-support
+
+To declare a lack of support for Co-Author Plus blocks on your site, use the filter `coauthors_plus_support_blocks` to return `false`.
diff --git a/build/blocks-store/index.asset.php b/build/blocks-store/index.asset.php
new file mode 100644
index 00000000..b14de6c9
--- /dev/null
+++ b/build/blocks-store/index.asset.php
@@ -0,0 +1 @@
+ array('wp-data', 'wp-hooks'), 'version' => '82f1cda3f1d3fbb0136c');
diff --git a/build/blocks-store/index.js b/build/blocks-store/index.js
new file mode 100644
index 00000000..f51ca210
--- /dev/null
+++ b/build/blocks-store/index.js
@@ -0,0 +1 @@
+!function(){"use strict";var o=window.wp.data,e=window.wp.hooks;(0,o.register)((0,o.createReduxStore)("co-authors-plus/blocks",{reducer:function(){let o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.coAuthorsBlocks;return o},selectors:{getAuthorPlaceholder:o=>(0,e.applyFilters)("co-authors-plus.author-placeholder",o.authorPlaceholder)}}))}();
\ No newline at end of file
diff --git a/build/blocks/block-coauthor-avatar/block.json b/build/blocks/block-coauthor-avatar/block.json
new file mode 100644
index 00000000..0692c654
--- /dev/null
+++ b/build/blocks/block-coauthor-avatar/block.json
@@ -0,0 +1,61 @@
+{
+ "$schema": "https://schemas.wp.org/trunk/block.json",
+ "apiVersion": 3,
+ "name": "co-authors-plus/avatar",
+ "version": "1.0.0",
+ "title": "Co-Author Avatar",
+ "category": "theme",
+ "description": "Displays a small scale version of a co-author's avatar. Utilizes fallbacks from Gravatar so everyone has an avatar.",
+ "keywords": [
+ "coauthors"
+ ],
+ "supports": {
+ "html": false,
+ "__experimentalBorder": {
+ "color": true,
+ "radius": true,
+ "width": true,
+ "__experimentalSelector": "img, .block-editor-media-placeholder",
+ "__experimentalSkipSerialization": true,
+ "__experimentalDefaultControls": {
+ "color": false,
+ "radius": false,
+ "width": false
+ }
+ },
+ "spacing": {
+ "margin": true,
+ "padding": true,
+ "__experimentalDefaultControls": {
+ "margin": false,
+ "padding": false
+ }
+ }
+ },
+ "usesContext": [
+ "co-authors-plus/author",
+ "co-authors-plus/layout"
+ ],
+ "attributes": {
+ "size": {
+ "type": "number",
+ "default": 24
+ },
+ "isLink": {
+ "type": "boolean",
+ "default": false
+ },
+ "rel": {
+ "type": "string"
+ },
+ "verticalAlign": {
+ "type": "string"
+ },
+ "align": {
+ "type": "string"
+ }
+ },
+ "textdomain": "co-authors-plus",
+ "editorScript": "file:./index.js",
+ "style": "file:./style-index.css"
+}
\ No newline at end of file
diff --git a/build/blocks/block-coauthor-avatar/index.asset.php b/build/blocks/block-coauthor-avatar/index.asset.php
new file mode 100644
index 00000000..b60246a1
--- /dev/null
+++ b/build/blocks/block-coauthor-avatar/index.asset.php
@@ -0,0 +1 @@
+ array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => 'b6b841ac8f86f7358245');
diff --git a/build/blocks/block-coauthor-avatar/index.js b/build/blocks/block-coauthor-avatar/index.js
new file mode 100644
index 00000000..dcf076b9
--- /dev/null
+++ b/build/blocks/block-coauthor-avatar/index.js
@@ -0,0 +1 @@
+!function(){var e,t={601:function(e,t,l){"use strict";var o=window.wp.blocks,n=window.wp.element,r=window.wp.primitives,a=(0,n.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(r.Path,{fillRule:"evenodd",d:"M7.25 16.437a6.5 6.5 0 1 1 9.5 0V16A2.75 2.75 0 0 0 14 13.25h-4A2.75 2.75 0 0 0 7.25 16v.437Zm1.5 1.193a6.47 6.47 0 0 0 3.25.87 6.47 6.47 0 0 0 3.25-.87V16c0-.69-.56-1.25-1.25-1.25h-4c-.69 0-1.25.56-1.25 1.25v1.63ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm10-2a2 2 0 1 1-4 0 2 2 0 0 1 4 0Z",clipRule:"evenodd"})),i=window.wp.i18n,u=window.wp.blockEditor,s=window.wp.components,c=window.wp.data,h=l(184),p=l.n(h);function v(e){let{dimensions:t,style:l,className:o}=e;const r=(0,n.useMemo)((()=>function(e){let{width:t,height:l}=e;return`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(``.replace(/[\t\n\r]/gim,"").replace(/\s\s+/g," ")).replace(/\(/g,"%28").replace(/\)/g,"%29")}`}(t)),[t]);return(0,n.createElement)("img",{alt:(0,i.__)("Placeholder image"),className:o,src:r,style:l,width:t.width,height:t.height})}var d=JSON.parse('{"u2":"co-authors-plus/avatar"}');(0,o.registerBlockType)(d.u2,{edit:function(e){var t;let{context:l,attributes:o,setAttributes:r}=e;const{isLink:a,rel:h,size:d,verticalAlign:g,align:f}=o,m=(0,c.useSelect)((e=>e("co-authors-plus/blocks").getAuthorPlaceholder()),[]),_=l["co-authors-plus/author"]||m,w=l["co-authors-plus/layout"]||"",{avatar_urls:b}=_;if(!b||0===b.length)return null;const y=Object.keys(b).map((e=>({value:e,label:`${e} x ${e}`}))),k=(0,u.__experimentalUseBorderProps)(o),x=null!==(t=b[d])&&void 0!==t?t:"";return(0,n.createElement)(n.Fragment,null,"default"!==w?(0,n.createElement)(u.BlockControls,null,(0,n.createElement)(u.BlockAlignmentToolbar,{value:f,onChange:e=>{r({align:e})},controls:["none","left","center","right"]})):null,(0,n.createElement)("div",(0,u.useBlockProps)({className:p()({[`align${f}`]:"default"!==w&&f&&"none"!==f})}),""===x?(0,n.createElement)(v,{className:k.className,dimensions:{width:d,height:d},style:{height:d,width:d,minWidth:"auto",minHeight:"auto",padding:0,verticalAlign:g,...k.style}}):(0,n.createElement)("img",{style:{...k.style,verticalAlign:g},width:d,height:d,src:`${b[d]}`})),(0,n.createElement)(u.InspectorControls,null,(0,n.createElement)(s.PanelBody,{title:(0,i.__)("Avatar Settings","co-authors-plus")},(0,n.createElement)(s.SelectControl,{label:(0,i.__)("Avatar size","co-authors-plus"),value:d,options:y,onChange:e=>{r({size:Number(e)})}}),(0,n.createElement)(s.ToggleControl,{label:(0,i.__)("Make avatar a link to author archive.","co-authors-plus"),onChange:()=>r({isLink:!a}),checked:a}),a&&(0,n.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,i.__)("Link rel","co-authors-plus"),value:h,onChange:e=>r({rel:e})})),"default"===w?(0,n.createElement)(s.PanelBody,{initialOpen:!1,title:(0,i.__)("Co-Authors Layout","co-authors-plus")},(0,n.createElement)(s.SelectControl,{label:(0,i.__)("Vertical align","co-authors-plus"),value:g,options:[{value:"",label:(0,i.__)("Default","co-authors-plus")},{value:"baseline",label:(0,i.__)("Baseline","co-authors-plus")},{value:"bottom",label:(0,i.__)("Bottom","co-authors-plus")},{value:"middle",label:(0,i.__)("Middle","co-authors-plus")},{value:"sub",label:(0,i.__)("Sub","co-authors-plus")},{value:"super",label:(0,i.__)("Super","co-authors-plus")},{value:"text-bottom",label:(0,i.__)("Text Bottom","co-authors-plus")},{value:"text-top",label:(0,i.__)("Text Top","co-authors-plus")},{value:"top",label:(0,i.__)("Top","co-authors-plus")}],onChange:e=>{r({verticalAlign:""===e?void 0:e})},help:(0,i.__)("Vertical alignment defaults to bottom in the block layout and middle in the inline layout.","co-authors-plus")})):null))},icon:a})},184:function(e,t){var l;!function(){"use strict";var o={}.hasOwnProperty;function n(){for(var e=[],t=0;t=r)&&Object.keys(o.O).every((function(e){return o.O[e](l[u])}))?l.splice(u--,1):(i=!1,r0&&e[c-1][2]>r;c--)e[c]=e[c-1];e[c]=[l,n,r]},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,{a:t}),t},o.d=function(e,t){for(var l in t)o.o(t,l)&&!o.o(e,l)&&Object.defineProperty(e,l,{enumerable:!0,get:t[l]})},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={893:0,30:0};o.O.j=function(t){return 0===e[t]};var t=function(t,l){var n,r,a=l[0],i=l[1],u=l[2],s=0;if(a.some((function(t){return 0!==e[t]}))){for(n in i)o.o(i,n)&&(o.m[n]=i[n]);if(u)var c=u(o)}for(t&&t(l);s array('wp-block-editor', 'wp-blocks', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => 'd61297f0bd62592218f0');
diff --git a/build/blocks/block-coauthor-description/index.css b/build/blocks/block-coauthor-description/index.css
new file mode 100644
index 00000000..ae02f029
--- /dev/null
+++ b/build/blocks/block-coauthor-description/index.css
@@ -0,0 +1 @@
+.wp-block-co-authors-plus-description a{pointer-events:none}
diff --git a/build/blocks/block-coauthor-description/index.js b/build/blocks/block-coauthor-description/index.js
new file mode 100644
index 00000000..452cc935
--- /dev/null
+++ b/build/blocks/block-coauthor-description/index.js
@@ -0,0 +1 @@
+!function(){var t={184:function(t,e){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var t=[],e=0;et("co-authors-plus/blocks").getAuthorPlaceholder()),[]),p=n["co-authors-plus/author"]||c,{description:f}=p;return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(a.BlockControls,null,(0,e.createElement)(a.AlignmentControl,{value:u,onChange:t=>{o({textAlign:t})}})),(0,e.createElement)("div",i({},(0,a.useBlockProps)({className:s()({[`has-text-align-${u}`]:u,"is-layout-flow":!0})}),{dangerouslySetInnerHTML:{__html:f.rendered}})))},icon:o})}()}();
\ No newline at end of file
diff --git a/build/blocks/block-coauthor-image/block.json b/build/blocks/block-coauthor-image/block.json
new file mode 100644
index 00000000..86847728
--- /dev/null
+++ b/build/blocks/block-coauthor-image/block.json
@@ -0,0 +1,73 @@
+{
+ "$schema": "https://schemas.wp.org/trunk/block.json",
+ "apiVersion": 3,
+ "name": "co-authors-plus/image",
+ "version": "1.0.0",
+ "title": "Co-Author Featured Image",
+ "category": "theme",
+ "description": "Uses your theme's image sizes to display a scalable avatar for a co-author with a guest author profile. Does not fallback to Gravatar images.",
+ "keywords": [
+ "coauthors"
+ ],
+ "supports": {
+ "__experimentalBorder": {
+ "color": true,
+ "radius": true,
+ "width": true,
+ "__experimentalSelector": "img, .block-editor-media-placeholder",
+ "__experimentalSkipSerialization": true,
+ "__experimentalDefaultControls": {
+ "color": false,
+ "radius": false,
+ "width": false
+ }
+ },
+ "spacing": {
+ "margin": true,
+ "padding": true,
+ "__experimentalDefaultControls": {
+ "margin": false,
+ "padding": false
+ }
+ }
+ },
+ "usesContext": [
+ "co-authors-plus/author",
+ "co-authors-plus/layout"
+ ],
+ "attributes": {
+ "isLink": {
+ "type": "boolean",
+ "default": false
+ },
+ "rel": {
+ "type": "string"
+ },
+ "aspectRatio": {
+ "type": "string"
+ },
+ "width": {
+ "type": "string"
+ },
+ "height": {
+ "type": "string"
+ },
+ "scale": {
+ "type": "string",
+ "default": "cover"
+ },
+ "sizeSlug": {
+ "type": "string"
+ },
+ "verticalAlign": {
+ "type": "string"
+ },
+ "align": {
+ "type": "string"
+ }
+ },
+ "textdomain": "co-authors-plus",
+ "editorScript": "file:./index.js",
+ "editorStyle": "file:./index.css",
+ "style": "file:./style-index.css"
+}
\ No newline at end of file
diff --git a/build/blocks/block-coauthor-image/index.asset.php b/build/blocks/block-coauthor-image/index.asset.php
new file mode 100644
index 00000000..699f315d
--- /dev/null
+++ b/build/blocks/block-coauthor-image/index.asset.php
@@ -0,0 +1 @@
+ array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => '97710ad46fb953ce4975');
diff --git a/build/blocks/block-coauthor-image/index.js b/build/blocks/block-coauthor-image/index.js
new file mode 100644
index 00000000..294955e5
--- /dev/null
+++ b/build/blocks/block-coauthor-image/index.js
@@ -0,0 +1 @@
+!function(){var e,t={62:function(e,t,l){"use strict";var o=window.wp.blocks,n=window.wp.element,a=window.wp.primitives,i=(0,n.createElement)(a.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,n.createElement)(a.Path,{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM5 4.5h14c.3 0 .5.2.5.5v8.4l-3-2.9c-.3-.3-.8-.3-1 0L11.9 14 9 12c-.3-.2-.6-.2-.8 0l-3.6 2.6V5c-.1-.3.1-.5.4-.5zm14 15H5c-.3 0-.5-.2-.5-.5v-2.4l4.1-3 3 1.9c.3.2.7.2.9-.1L16 12l3.5 3.4V19c0 .3-.2.5-.5.5z"})),r=window.wp.i18n,s=window.wp.blockEditor,u=window.wp.components,c=window.wp.data,h=window.wp.coreData;const p=(0,n.createElement)(n.Fragment,null,(0,n.createElement)(u.__experimentalToggleGroupControlOption,{value:"cover",label:(0,r._x)("Cover","Scale option for Image dimension control")}),(0,n.createElement)(u.__experimentalToggleGroupControlOption,{value:"contain",label:(0,r._x)("Contain","Scale option for Image dimension control")}),(0,n.createElement)(u.__experimentalToggleGroupControlOption,{value:"fill",label:(0,r._x)("Fill","Scale option for Image dimension control")})),g="cover",d={cover:(0,r.__)("Image is scaled and cropped to fill the entire space without being distorted."),contain:(0,r.__)("Image is scaled to fill the space without clipping nor distorting."),fill:(0,r.__)("Image will be stretched and distorted to completely fill the space.")};var m=e=>{let{clientId:t,attributes:{aspectRatio:l,width:o,height:a,scale:i,sizeSlug:c},setAttributes:h,imageSizeOptions:m=[]}=e;const _=(0,u.__experimentalUseCustomUnits)({availableUnits:(0,s.useSetting)("spacing.units")||["px","%","vw","em","rem"]}),v=(e,t)=>{const l=parseFloat(t);isNaN(l)&&t||h({[e]:l<0?"0":t})},f=(0,r._x)("Scale","Image scaling options"),w=a||l&&"auto"!==l;return(0,n.createElement)(s.InspectorControls,{group:"dimensions"},(0,n.createElement)(u.__experimentalToolsPanelItem,{hasValue:()=>!!l,label:(0,r.__)("Aspect ratio"),onDeselect:()=>h({aspectRatio:void 0}),resetAllFilter:()=>({aspectRatio:void 0}),isShownByDefault:!0,panelId:t},(0,n.createElement)(u.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,r.__)("Aspect ratio"),value:l,options:[{label:(0,r.__)("Original"),value:"auto"},{label:(0,r.__)("Square"),value:"1"},{label:(0,r.__)("16:9"),value:"16/9"},{label:(0,r.__)("4:3"),value:"4/3"},{label:(0,r.__)("3:2"),value:"3/2"},{label:(0,r.__)("9:16"),value:"9/16"},{label:(0,r.__)("3:4"),value:"3/4"},{label:(0,r.__)("2:3"),value:"2/3"}],onChange:e=>h({aspectRatio:e})})),(0,n.createElement)(u.__experimentalToolsPanelItem,{className:"single-column",hasValue:()=>!!a,label:(0,r.__)("Height"),onDeselect:()=>h({height:void 0}),resetAllFilter:()=>({height:void 0}),isShownByDefault:!0,panelId:t},(0,n.createElement)(u.__experimentalUnitControl,{label:(0,r.__)("Height"),labelPosition:"top",value:a||"",min:0,onChange:e=>v("height",e),units:_})),(0,n.createElement)(u.__experimentalToolsPanelItem,{className:"single-column",hasValue:()=>!!o,label:(0,r.__)("Width"),onDeselect:()=>h({width:void 0}),resetAllFilter:()=>({width:void 0}),isShownByDefault:!0,panelId:t},(0,n.createElement)(u.__experimentalUnitControl,{label:(0,r.__)("Width"),labelPosition:"top",value:o||"",min:0,onChange:e=>v("width",e),units:_})),w&&(0,n.createElement)(u.__experimentalToolsPanelItem,{hasValue:()=>!!i&&i!==g,label:f,onDeselect:()=>h({scale:g}),resetAllFilter:()=>({scale:g}),isShownByDefault:!0,panelId:t},(0,n.createElement)(u.__experimentalToggleGroupControl,{__nextHasNoMarginBottom:!0,label:f,value:i,help:d[i],onChange:e=>h({scale:e}),isBlock:!0},p)),!!m.length&&(0,n.createElement)(u.__experimentalToolsPanelItem,{hasValue:()=>!!c,label:(0,r.__)("Resolution"),onDeselect:()=>h({sizeSlug:void 0}),resetAllFilter:()=>({sizeSlug:void 0}),isShownByDefault:!1,panelId:t},(0,n.createElement)(u.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,r.__)("Resolution"),value:c||"thumbnail",options:m,onChange:e=>h({sizeSlug:e}),help:(0,r.__)("Select the size of the source image.")})))};function _(e){let{dimensions:t,style:l,className:o}=e;const a=(0,n.useMemo)((()=>function(e){let{width:t,height:l}=e;return`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(``.replace(/[\t\n\r]/gim,"").replace(/\s\s+/g," ")).replace(/\(/g,"%28").replace(/\)/g,"%29")}`}(t)),[t]);return(0,n.createElement)("img",{alt:(0,r.__)("Placeholder image"),className:o,src:a,style:l,width:t.width,height:t.height})}function v(e,t){var l,o;return null==e||null===(l=e.media_details)||void 0===l||null===(o=l.sizes[t])||void 0===o?void 0:o.source_url}var f=l(184),w=l.n(f),b=JSON.parse('{"u2":"co-authors-plus/image"}');(0,o.registerBlockType)(b.u2,{edit:function(e){let{attributes:t,setAttributes:l,context:o,clientId:a}=e;const{aspectRatio:i,height:p,isLink:g,rel:d,scale:f,sizeSlug:b,verticalAlign:x,width:S,align:y}=t,E=(0,c.useSelect)((e=>e("co-authors-plus/blocks").getAuthorPlaceholder()),[]),C=o["co-authors-plus/author"]||E,k=o["co-authors-plus/layout"]||"",I=(0,c.useSelect)((e=>0!==C.featured_media&&e(h.store).getMedia(C.featured_media,{context:"view"})),[C.featured_media]),{imageSizes:O,imageDimensions:B}=(0,c.useSelect)((e=>e(s.store).getSettings()),[]),A=O.map((e=>{let{name:t,slug:l}=e;return{value:l,label:t}})),T=function(e,t,l){if(e&&"full"===l)return l;const o=function(e,t){if(!e)return Object.keys(t);const l=Object.keys(e.media_details.sizes),o=Object.keys(t);return Array.from(new Set([...l.filter((e=>o.includes(e)))]))}(e,t);return l&&o.includes(l)?l:o[0]}(I,B,b),N=function(e,t,l){if(!e)return{};const o=e.media_details.sizes[l];if("full"===l)return{width:o.width,height:o.height};const n=t[l];if(!0===n.crop||n.width===n.height)return{width:n.width,height:n.height};const a=o.width/o.height;return n.width>n.height?{width:n.width,height:n.width/a}:{width:n.height*a,height:n.height}}(I,B,T),P=I?{}:function(e,t){const l=e[t];return!0===l.crop||l.width===l.height?{width:l.width,height:l.height}:l.width>l.height?{width:l.width,height:l.width}:{width:l.height,height:l.height}}(B,T),z=(0,s.__experimentalUseBorderProps)(t),D=0!==C.id&&!1===I;return(0,n.createElement)(n.Fragment,null,(0,n.createElement)(m,{clientId:a,attributes:t,setAttributes:l,imageSizeOptions:A}),""===k?(0,n.createElement)(s.BlockControls,null,(0,n.createElement)(s.BlockAlignmentToolbar,{value:y,onChange:e=>{l({align:e})},controls:["none","left","center","right","wide","full"]})):null,D?null:(0,n.createElement)("figure",(0,s.useBlockProps)({className:w()({[`align${y}`]:!k&&y&&"none"!==y})}),I?(0,n.createElement)("img",{alt:(0,r.__)("Author featured image","co-authors-plus"),className:z.className,src:v(I,T),style:{width:!S&&p?"auto":S,height:!p&&S?"auto":p,aspectRatio:i,objectFit:f,verticalAlign:x,...z.style},width:N.width,height:N.height}):(0,n.createElement)(_,{className:z.className,dimensions:P,style:{width:!S&&p?"auto":S,height:!p&&S?"auto":p,aspectRatio:i,objectFit:f,verticalAlign:x,...z.style}})),(0,n.createElement)(s.InspectorControls,null,(0,n.createElement)(u.PanelBody,{title:(0,r.__)("Image Settings","co-authors-plus")},(0,n.createElement)(u.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,r.__)("Make featured image a link to author archive.","co-authors-plus"),onChange:()=>l({isLink:!g}),checked:g}),g&&(0,n.createElement)(u.TextControl,{__nextHasNoMarginBottom:!0,label:(0,r.__)("Link rel","co-authors-plus"),value:d,onChange:e=>l({rel:e})})),"default"===k?(0,n.createElement)(u.PanelBody,{initialOpen:!1,title:(0,r.__)("Co-Authors Layout","co-authors-plus")},(0,n.createElement)(u.SelectControl,{label:(0,r.__)("Vertical align","co-authors-plus"),value:x,options:[{value:"",label:(0,r.__)("Default","co-authors-plus")},{value:"baseline",label:(0,r.__)("Baseline","co-authors-plus")},{value:"bottom",label:(0,r.__)("Bottom","co-authors-plus")},{value:"middle",label:(0,r.__)("Middle","co-authors-plus")},{value:"sub",label:(0,r.__)("Sub","co-authors-plus")},{value:"super",label:(0,r.__)("Super","co-authors-plus")},{value:"text-bottom",label:(0,r.__)("Text Bottom","co-authors-plus")},{value:"text-top",label:(0,r.__)("Text Top","co-authors-plus")},{value:"top",label:(0,r.__)("Top","co-authors-plus")}],onChange:e=>{l({verticalAlign:""===e?void 0:e})},help:(0,r.__)("Vertical alignment defaults to bottom in the block layout and middle in the inline layout.","co-authors-plus")})):null))},icon:i})},184:function(e,t){var l;!function(){"use strict";var o={}.hasOwnProperty;function n(){for(var e=[],t=0;t=a)&&Object.keys(o.O).every((function(e){return o.O[e](l[s])}))?l.splice(s--,1):(r=!1,a0&&e[c-1][2]>a;c--)e[c]=e[c-1];e[c]=[l,n,a]},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,{a:t}),t},o.d=function(e,t){for(var l in t)o.o(t,l)&&!o.o(e,l)&&Object.defineProperty(e,l,{enumerable:!0,get:t[l]})},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={461:0,286:0};o.O.j=function(t){return 0===e[t]};var t=function(t,l){var n,a,i=l[0],r=l[1],s=l[2],u=0;if(i.some((function(t){return 0!==e[t]}))){for(n in r)o.o(r,n)&&(o.m[n]=r[n]);if(s)var c=s(o)}for(t&&t(l);u array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => '3a57c4d58ba62fabefff');
diff --git a/build/blocks/block-coauthor-name/index.js b/build/blocks/block-coauthor-name/index.js
new file mode 100644
index 00000000..3e07a0e1
--- /dev/null
+++ b/build/blocks/block-coauthor-name/index.js
@@ -0,0 +1 @@
+!function(){var e={184:function(e,t){var n;!function(){"use strict";var o={}.hasOwnProperty;function l(){for(var e=[],t=0;te("co-authors-plus/blocks").getAuthorPlaceholder()),[]),g=n["co-authors-plus/author"]||m,{link:d,display_name:f}=g,w=h;return(0,t.createElement)(t.Fragment,null,(0,t.createElement)(r.BlockControls,null,(0,t.createElement)(r.AlignmentControl,{value:v,onChange:e=>{l({textAlign:e})}})),(0,t.createElement)(w,(0,r.useBlockProps)({className:c()({[`has-text-align-${v}`]:v})}),s?(0,t.createElement)("a",{href:d,rel:p,onClick:e=>e.preventDefault()},f):f),(0,t.createElement)(r.InspectorControls,null,(0,t.createElement)(a.PanelBody,{title:(0,u.__)("Settings","co-authors-plus")},(0,t.createElement)(a.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,u.__)("Make co-author name a link","co-authors-plus"),onChange:()=>l({isLink:!s}),checked:s}),s&&(0,t.createElement)(t.Fragment,null,(0,t.createElement)(a.TextControl,{__nextHasNoMarginBottom:!0,label:(0,u.__)("Link rel","co-authors-plus"),value:p,onChange:e=>l({rel:e})})))),(0,t.createElement)(r.InspectorControls,{group:"advanced"},(0,t.createElement)(a.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,u.__)("HTML element","co-authors-plus"),options:[{label:(0,u.__)("Default (