{"id":362558,"date":"2026-09-19T13:13:47","date_gmt":"2026-09-19T13:13:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/neura-blocks\/"},"modified":"2026-09-19T13:13:18","modified_gmt":"2026-09-19T13:13:18","slug":"zealblocks","status":"publish","type":"plugin","link":"https:\/\/sr.wordpress.org\/plugins\/zealblocks\/","author":15848139,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.0.1","stable_tag":"0.0.1","tested":"7.1.1","requires":"7.1","requires_php":"8.1","requires_plugins":null,"header_name":"Zealblocks","header_author":"Aman Dubey","header_description":"A Gutenberg block collection built on the WordPress 7.1 block API.","assets_banners_color":"","last_updated":"2026-09-19 13:13:18","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/amandubey.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":33,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.0.1":{"tag":"0.0.1","author":"amandubey","date":"2026-09-19 13:13:18","revision":3703313}},"upgrade_notice":{"0.0.1":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3703317,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3703317,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":{"zealblocks\/icon":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"zealblocks\/icon","version":"0.0.1","title":"Icon","category":"zealblocks","icon":"star-filled","description":"An SVG icon from the WordPress icon library, with flip and rotation controls.","keywords":["svg","symbol","graphic"],"textdomain":"zealblocks","attributes":{"icon":{"type":"string","default":"","role":"content"},"isInline":{"type":"boolean","default":false},"flipHorizontal":{"type":"boolean","default":false},"flipVertical":{"type":"boolean","default":false},"rotation":{"type":"number","default":0},"label":{"type":"string","default":""}},"supports":{"html":false,"anchor":true,"align":["left","center","right"],"shadow":true,"color":{"gradients":true,"text":true,"background":true,"__experimentalDefaultControls":{"text":true}},"spacing":{"margin":true,"padding":true,"__experimentalDefaultControls":{"margin":true}},"dimensions":{"width":true,"__experimentalDefaultControls":{"width":true}},"__experimentalBorder":{"color":true,"radius":true,"style":true,"width":true,"__experimentalDefaultControls":{"radius":true}}},"editorScript":"file:.\/index.js","style":"file:.\/style-index.css","editorStyle":"file:.\/index.css","render":"file:.\/render.php"},"zealblocks\/buttons":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"zealblocks\/buttons","version":"0.0.1","title":"Buttons","category":"zealblocks","icon":"button","description":"Prompt visitors to take action with a group of button-style links.","keywords":["link","button"],"textdomain":"zealblocks","allowedBlocks":["zealblocks\/button"],"supports":{"html":false,"anchor":true,"align":["wide","full"],"spacing":{"blockGap":["horizontal","vertical"],"padding":true,"margin":["top","bottom"],"__experimentalDefaultControls":{"blockGap":true}},"layout":{"allowSwitching":false,"allowInheriting":false,"default":{"type":"flex"}},"listView":true},"editorScript":"file:.\/index.js","style":"file:.\/style-index.css","editorStyle":"file:.\/index.css","render":"file:.\/render.php"},"zealblocks\/text":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"zealblocks\/text","version":"0.0.1","title":"Text","category":"zealblocks","icon":"editor-textcolor","description":"Text with a visual style chosen independently of the theme\u2019s default sizing.","keywords":["text","paragraph","typography","style"],"textdomain":"zealblocks","attributes":{"content":{"type":"string","default":"","role":"content"},"styleAs":{"type":"string","default":""},"placeholder":{"type":"string"}},"supports":{"html":false,"anchor":true,"splitting":true,"align":["wide","full"],"shadow":true,"__experimentalSlashInserter":true,"typography":{"fontSize":true,"lineHeight":true,"textAlign":true,"textColumns":true,"textIndent":true,"__experimentalFontFamily":true,"__experimentalFontStyle":true,"__experimentalFontWeight":true,"__experimentalLetterSpacing":true,"__experimentalTextTransform":true,"__experimentalTextDecoration":true,"__experimentalWritingMode":true,"__experimentalDefaultControls":{"fontSize":true}},"color":{"gradients":true,"link":true,"text":true,"background":true,"__experimentalDefaultControls":{"text":true,"background":true}},"spacing":{"margin":true,"padding":true,"__experimentalDefaultControls":{"padding":true}},"dimensions":{"minHeight":true},"__experimentalBorder":{"color":true,"radius":true,"style":true,"width":true,"__experimentalDefaultControls":{"color":true,"radius":true,"style":true,"width":true}}},"editorScript":"file:.\/index.js","style":"file:.\/style-index.css","editorStyle":"file:.\/index.css","render":"file:.\/render.php"},"zealblocks\/button":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"zealblocks\/button","version":"0.0.1","title":"Button","category":"zealblocks","icon":"button","description":"Prompt visitors to take action with a button-style link.","keywords":["link"],"textdomain":"zealblocks","parent":["zealblocks\/buttons"],"attributes":{"text":{"type":"string","default":""},"url":{"type":"string","default":""},"linkTarget":{"type":"string","default":""},"rel":{"type":"string","default":""},"title":{"type":"string","default":""},"tagName":{"type":"string","enum":["a","button"],"default":"a"},"icon":{"type":"string","default":""},"iconPosition":{"type":"string","enum":["left","right"],"default":"right"}},"supports":{"html":false,"anchor":true,"align":false,"alignWide":false,"reusable":false,"typography":{"fontSize":true,"lineHeight":true,"textAlign":true,"__experimentalFontFamily":true,"__experimentalFontWeight":true,"__experimentalFontStyle":true,"__experimentalTextTransform":true,"__experimentalTextDecoration":true,"__experimentalLetterSpacing":true,"__experimentalDefaultControls":{"fontSize":true}},"spacing":{"padding":["horizontal","vertical"],"__experimentalDefaultControls":{"padding":true}},"color":{"gradients":true,"text":true,"background":true,"__experimentalDefaultControls":{"background":true,"text":true}},"shadow":true,"__experimentalBorder":{"color":true,"radius":true,"style":true,"width":true,"__experimentalDefaultControls":{"color":true,"radius":true,"style":true,"width":true}}},"styles":[{"name":"fill","label":"Fill","isDefault":true},{"name":"outline","label":"Outline"}],"editorScript":"file:.\/index.js","style":"file:.\/style-index.css","editorStyle":"file:.\/index.css","render":"file:.\/render.php"}},"tagged_versions":["0.0.1"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"A Buttons container holding two Button blocks, one with an arrow icon.","2":"The Custom Width and Icon Size controls in the Styles tab.","3":"Editing a Mobile-only width with Responsive styles enabled.","4":"The Zealblocks category in the block inserter."}},"plugin_section":[],"plugin_tags":[4121,190071,485,498,606],"plugin_category":[50],"plugin_contributors":[257240],"plugin_business_model":[],"class_list":["post-362558","plugin","type-plugin","status-publish","hentry","plugin_tags-blocks","plugin_tags-breakpoints","plugin_tags-button","plugin_tags-icons","plugin_tags-responsive","plugin_category-media","plugin_contributors-amandubey","plugin_committers-amandubey"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/zealblocks\/assets\/icon-128x128.png?rev=3703317","icon_2x":"https:\/\/ps.w.org\/zealblocks\/assets\/icon-256x256.png?rev=3703317","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Zealblocks adds blocks that build on WordPress 7.1's block API instead of\nduplicating it. Core's typography, colour, spacing and border controls \u2014 and\ncore's per-viewport style states \u2014 are declared as supports and inherited, not\nreimplemented. What Zealblocks adds is the part core leaves out.<\/p>\n\n<h4>Blocks<\/h4>\n\n<ul>\n<li><strong>Icon<\/strong> \u2014 an SVG icon from the WordPress icon library, with flip, free rotation and a proper decorative\/meaningful accessibility choice.<\/li>\n<li><strong>Text<\/strong> \u2014 a paragraph with a visual style preset: Display, H1\u2013H6, Lead, Body, Caption or Eyebrow, chosen independently of the theme's default paragraph sizing.<\/li>\n<li><strong>Buttons<\/strong> \u2014 a flex container for one or more buttons, with block gap, padding and wide\/full alignment.<\/li>\n<li><strong>Button<\/strong> \u2014 a button-style link with an optional icon, and per-viewport width and icon size.<\/li>\n<\/ul>\n\n<h4>Built on the WordPress icon library<\/h4>\n\n<p>The Icon block uses the icon registry WordPress 7.1 added, so it draws on the 88\nicons that ship with core rather than bundling its own set \u2014 and any icon a\ntheme or plugin registers appears in it automatically.<\/p>\n\n<p>Icons are marked up correctly for assistive technology: leave the alternative\ntext empty and the icon is hidden from screen readers as decoration; set it and\nthe icon is announced as content. That distinction is the most commonly missed\npart of icon accessibility.<\/p>\n\n<h4>The typographic scale follows your theme<\/h4>\n\n<p>The Text block's presets are emitted as classes, and each one resolves through your\ntheme's own <code>theme.json<\/code> font-size presets before falling back to a fluid\n    clamp(). So a theme with a real type scale drives the look, a theme without\none still renders sensibly, and a theme can override the whole scale in one\nplace. Nothing is written as an inline style, which is what would otherwise beat\nthe theme permanently.<\/p>\n\n<p>The Eyebrow preset \u2014 the small uppercase label that sits above a heading \u2014 has\nno equivalent in core, and is the one most often faked with an undersized H6.<\/p>\n\n<h4>On responsive values<\/h4>\n\n<p>WordPress 7.1 emits per-viewport CSS for its own style paths, so Zealblocks does\nnot need to reinvent that and does not try to. Where Zealblocks adds a property\ncore has no support for, it stores the value inside core's own <code>style<\/code> attribute\nunder a namespaced key, in core's viewport-state shape, and generates the CSS\nusing core's media queries:<\/p>\n\n<pre><code>style.zealblocks.width for the base layer, `style.@tablet.zealblocks.width`\n<\/code><\/pre>\n\n<p>and <code>style.@mobile.zealblocks.width<\/code> for the overrides. Icon size uses the\nsame shape under <code>iconSize<\/code>.<\/p>\n\n<p>The breakpoints come from <code>WP_Theme_JSON::get_viewport_media_queries()<\/code>, which\nreads <code>settings.viewport<\/code> from theme.json. Change your breakpoints there and\nZealblocks follows, because it never had its own.<\/p>\n\n<p>Desktop is the base layer rather than a third band, matching core: it carries no\nmedia query and applies at every width, so Mobile falls back to the base value\nwhen unset, never to Tablet.<\/p>\n\n<h4>Icons<\/h4>\n\n<p>Four built-in icons (arrow, chevron, download, external), positionable left or\nright. Position is done with <code>flex-direction: row-reverse<\/code> rather than <code>order<\/code>,\nso the DOM order stays text-then-icon and the button's accessible name is\nunaffected by where the icon appears. Icons are marked <code>aria-hidden<\/code> \u2014 they are\ndecorative, and the button text is the accessible name.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>Zealblocks does not collect, store or transmit any data. It makes no external\nnetwork requests, sets no cookies, creates no database tables, and registers no\nREST endpoints or AJAX handlers.<\/p>\n\n<h4>Source code<\/h4>\n\n<p>The JavaScript in <code>build\/<\/code> is compiled and minified by <code>@wordpress\/scripts<\/code>.\nThe unminified sources, the build configuration and the full development\nhistory are public at:<\/p>\n\n<p>https:\/\/github.com\/rahulvarma722\/zealblocks<\/p>\n\n<p>To build from source: <code>npm install &amp;&amp; npm run build<\/code>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin through <strong>Plugins &gt; Add New<\/strong>, or extract the ZIP into <code>wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate <strong>Zealblocks<\/strong> through the <strong>Plugins<\/strong> menu.<\/li>\n<li>In the editor, insert <strong>Buttons<\/strong> from the <strong>Zealblocks<\/strong> category in the block inserter.<\/li>\n<li>Select a button and open the <strong>Styles<\/strong> tab to find <strong>Custom Width<\/strong> and <strong>Icon Size<\/strong>.<\/li>\n<\/ol>\n\n<p>To set a per-viewport value, switch the editor preview to Tablet or Mobile with\nResponsive styles enabled, then change the value. With Responsive styles off, a\nnarrow preview edits the base layer \u2014 the same behaviour as core's controls.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"why%20does%20it%20require%20wordpress%207.1%3F\"><h3>Why does it require WordPress 7.1?<\/h3><\/dt>\n<dd><p>Per-viewport style states are a 7.1 feature. The controls read and write core's\nviewport-state layers and detect which state the editor is in from core's own\nslots, none of which exist earlier. On WordPress 6.x the controls would appear to\nwork while writing values the editor could not show back to you.<\/p><\/dd>\n<dt id=\"where%20do%20the%20breakpoints%20come%20from%3F\"><h3>Where do the breakpoints come from?<\/h3><\/dt>\n<dd><p>WP_Theme_JSON::get_viewport_media_queries(), which reads <code>settings.viewport<\/code>\nfrom your theme.json. The defaults are 480px for mobile and 782px for tablet,\nidentical to core's. Zealblocks has no breakpoints of its own to configure.<\/p><\/dd>\n<dt id=\"why%20is%20desktop%20not%20listed%20alongside%20tablet%20and%20mobile%3F\"><h3>Why is Desktop not listed alongside Tablet and Mobile?<\/h3><\/dt>\n<dd><p>Because Desktop is the base layer, not a breakpoint. A value set on Desktop\ncarries no media query and therefore applies at every width; Tablet and Mobile\nare overrides on top of it. This is core's model, and following it is what makes\nMobile fall back to your Desktop value rather than to your Tablet value.<\/p><\/dd>\n<dt id=\"can%20i%20use%20these%20buttons%20inside%20core%27s%20buttons%20block%3F\"><h3>Can I use these buttons inside core's Buttons block?<\/h3><\/dt>\n<dd><p>No. This plugin's Button declares <code>zealblocks\/buttons<\/code> as its parent, so it\ncan only be inserted into a Buttons container. The container supplies the flex\nlayout and block gap the button expects.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20full%20site%20editing%20and%20template%20parts%3F\"><h3>Does it work with Full Site Editing and template parts?<\/h3><\/dt>\n<dd><p>Yes. The per-viewport CSS goes through the WordPress style engine \u2014 the same\npath core uses for its own per-viewport styles \u2014 and is printed once with\n    wp_add_inline_style(): in the head on block themes, in the footer on classic\nthemes. Nothing is emitted inline next to the block.<\/p><\/dd>\n<dt id=\"does%20it%20add%20any%20front-end%20javascript%3F\"><h3>Does it add any front-end JavaScript?<\/h3><\/dt>\n<dd><p>No. Every block renders server-side in PHP and ships no front-end script.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.0.1<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Buttons container block with flex layout, block gap, padding and wide\/full alignment.<\/li>\n<li>Button block with link controls, four icons, and left\/right icon position.<\/li>\n<li>Per-viewport Custom Width and Icon Size using WordPress 7.1 style states and core's viewport media queries.<\/li>\n<\/ul>","raw_excerpt":"Blocks that extend WordPress 7.1 rather than reinvent it \u2014 a typographic scale that follows your theme, and per-viewport button sizing.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/sr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/362558","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/sr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/sr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=362558"}],"author":[{"embeddable":true,"href":"https:\/\/sr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/amandubey"}],"wp:attachment":[{"href":"https:\/\/sr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=362558"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/sr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=362558"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/sr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=362558"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/sr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=362558"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/sr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=362558"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/sr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=362558"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}