{"id":371633,"date":"2026-09-30T08:12:51","date_gmt":"2026-09-30T08:12:51","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/etu-blocks-interactive-accessible-block-library-page-builder\/"},"modified":"2026-09-30T08:12:14","modified_gmt":"2026-09-30T08:12:14","slug":"etu-blocks","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/etu-blocks\/","author":23382822,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.2","requires":"6.7","requires_php":"7.4","requires_plugins":null,"header_name":"Etu Blocks \u2014 Interactive Accessible Block Library & Page Builder","header_author":"Etu","header_description":"A curated library of accessible, Interactivity-API-powered blocks for the WordPress editor.","assets_banners_color":"747283","last_updated":"2026-09-30 08:12:14","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/wise.com\/pay\/me\/mdrayhanu2","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":47,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"rayetun","date":"2026-09-30 08:12:14","revision":3720632}},"upgrade_notice":{"1.0.0":"<p>First public release of Etu Blocks.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3720632,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3720632,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3720632,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3720632,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3720632,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"etu\/steps":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/steps","version":"1.0.0","title":"Steps","category":"etu-blocks","icon":"editor-ol","description":"A numbered, ordered list of steps \u2014 great for how-tos and processes.","keywords":["steps","process","how to","numbered"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"align":["wide","full"]},"attributes":{"items":{"type":"array","default":[{"title":"Sign up","description":"Create your free account in seconds."},{"title":"Add blocks","description":"Insert Etu blocks into any page or post."},{"title":"Publish","description":"Go live with accessible, fast content."}]},"preset":{"type":"string","default":"connected"},"accentColor":{"type":"string","default":""},"titleColor":{"type":"string","default":""},"descColor":{"type":"string","default":""},"titleTypography":{"type":"object","default":{}},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"preset":"connected","items":[{"title":"Sign up","description":"Create your free account."},{"title":"Publish","description":"Go live in minutes."}]}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/render.php"},"etu\/comparison-table":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/comparison-table","version":"1.0.0","title":"Comparison Table","category":"etu-blocks","icon":"editor-table","description":"Compare plans or products across features \u2014 with a highlighted column, check \/ cross \/ text cells and a premium accessible design.","keywords":["comparison","table","pricing","features","compare"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"align":["wide","full"]},"attributes":{"columns":{"type":"array","default":[{"title":"Free","badge":"","highlighted":false,"buttonText":"","buttonUrl":""},{"title":"Pro","badge":"Popular","highlighted":true,"buttonText":"","buttonUrl":""},{"title":"Business","badge":"","highlighted":false,"buttonText":"","buttonUrl":""}]},"rows":{"type":"array","default":[{"label":"Projects","cells":[{"type":"text","text":"3"},{"type":"text","text":"25"},{"type":"text","text":"Unlimited"}]},{"label":"Storage","cells":[{"type":"text","text":"2 GB"},{"type":"text","text":"50 GB"},{"type":"text","text":"1 TB"}]},{"label":"Priority support","cells":[{"type":"cross","text":""},{"type":"check","text":""},{"type":"check","text":""}]},{"label":"Custom domain","cells":[{"type":"cross","text":""},{"type":"check","text":""},{"type":"check","text":""}]}]},"preset":{"type":"string","default":"modern"},"cellAlign":{"type":"string","default":"center"},"stripe":{"type":"boolean","default":true},"accentColor":{"type":"string","default":""},"headingColor":{"type":"string","default":""},"textColor":{"type":"string","default":""},"stripeColor":{"type":"string","default":""},"headingTypography":{"type":"object","default":{}},"cellTypography":{"type":"object","default":{}},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"columns":[{"title":"Free","highlighted":false},{"title":"Pro","badge":"Popular","highlighted":true}],"rows":[{"label":"Storage","cells":[{"type":"text","text":"2 GB"},{"type":"text","text":"1 TB"}]}]}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/render.php"},"etu\/counter":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/counter","version":"1.0.0","title":"Counter","category":"etu-blocks","icon":"chart-bar","description":"An animated number that counts up when it scrolls into view \u2014 perfect for stats.","keywords":["counter","number","stats","count up"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"]},"attributes":{"number":{"type":"string","default":"1200"},"prefix":{"type":"string","default":""},"suffix":{"type":"string","default":"+"},"label":{"type":"string","default":"Happy customers"},"duration":{"type":"number","default":2000},"separator":{"type":"boolean","default":true},"preset":{"type":"string","default":"minimal"},"contentAlign":{"type":"string","default":"center"},"accentColor":{"type":"string","default":""},"numberColor":{"type":"string","default":""},"labelColor":{"type":"string","default":""},"numberTypography":{"type":"object","default":{}},"labelTypography":{"type":"object","default":{}},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"number":"2500","suffix":"+","label":"Happy customers","preset":"card"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"etu\/data-table":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/data-table","version":"1.0.0","title":"Data Table","category":"etu-blocks","icon":"editor-table","description":"A structured data table with sortable columns, live search, sticky header and responsive stacking \u2014 accessible and powered by the Interactivity API.","keywords":["table","data","sortable","grid","spreadsheet"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"]},"attributes":{"columns":{"type":"array","default":[{"label":"Name","align":"left","type":"text"},{"label":"Role","align":"left","type":"text"},{"label":"Score","align":"right","type":"number"}]},"rows":{"type":"array","default":[["Ada Lovelace","Engineer","98"],["Alan Turing","Researcher","95"],["Grace Hopper","Admiral","99"]]},"caption":{"type":"string","default":""},"sortable":{"type":"boolean","default":true},"searchable":{"type":"boolean","default":false},"stickyHeader":{"type":"boolean","default":false},"striped":{"type":"boolean","default":true},"bordered":{"type":"boolean","default":false},"compact":{"type":"boolean","default":false},"responsive":{"type":"string","default":"scroll"},"headerBg":{"type":"string","default":""},"headerColor":{"type":"string","default":""},"accentColor":{"type":"string","default":""},"stripeColor":{"type":"string","default":""},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"caption":"Team scores","striped":true}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"etu\/post-grid":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/post-grid","version":"1.0.0","title":"Post Grid","category":"etu-blocks","icon":"grid-view","description":"Display posts in a premium grid, masonry or carousel \u2014 with a category filter, full query controls and accessible cards. Built on the Interactivity API.","keywords":["posts","grid","masonry","carousel","blog","query"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"]},"attributes":{"postType":{"type":"string","default":"post"},"perPage":{"type":"number","default":6},"orderBy":{"type":"string","default":"date"},"order":{"type":"string","default":"desc"},"queryCategories":{"type":"array","default":[]},"offset":{"type":"number","default":0},"excludeCurrent":{"type":"boolean","default":true},"layout":{"type":"string","default":"grid"},"columns":{"type":"string","default":"3"},"carouselPerView":{"type":"object","default":{"desktop":3,"tablet":2,"mobile":1}},"cardStyle":{"type":"string","default":"elevated"},"hoverEffect":{"type":"string","default":"both"},"showImage":{"type":"boolean","default":true},"imageRatio":{"type":"string","default":"landscape"},"showTitle":{"type":"boolean","default":true},"showExcerpt":{"type":"boolean","default":true},"excerptLength":{"type":"number","default":20},"showMeta":{"type":"boolean","default":true},"showAuthor":{"type":"boolean","default":false},"showCategory":{"type":"boolean","default":true},"showButton":{"type":"boolean","default":false},"buttonText":{"type":"string","default":"Read more"},"enableFilter":{"type":"boolean","default":false},"showArrows":{"type":"boolean","default":true},"showDots":{"type":"boolean","default":true},"accentColor":{"type":"string","default":""},"cardBackground":{"type":"string","default":""},"titleColor":{"type":"string","default":""},"textColor":{"type":"string","default":""},"titleTypography":{"type":"object","default":{}},"cardGap":{"type":"object","default":{"value":24,"unit":"px"}},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"layout":"grid","columns":"3"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"etu\/pricing-table":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/pricing-table","version":"1.0.0","title":"Pricing Table","category":"etu-blocks","icon":"money-alt","description":"Premium pricing plans with a featured plan, feature lists and an optional monthly \/ yearly billing toggle. Accessible and built on the Interactivity API.","keywords":["pricing","plans","price","table","subscription"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"]},"attributes":{"plans":{"type":"array","default":[{"name":"Starter","badge":"","highlighted":false,"currency":"$","price":"0","priceYearly":"0","period":"\/mo","periodYearly":"\/yr","description":"For getting started","features":[{"text":"1 project","included":true},{"text":"2 GB storage","included":true},{"text":"Priority support","included":false},{"text":"Custom domain","included":false}],"buttonText":"Choose Starter","buttonUrl":""},{"name":"Pro","badge":"Most popular","highlighted":true,"currency":"$","price":"29","priceYearly":"290","period":"\/mo","periodYearly":"\/yr","description":"For growing teams","features":[{"text":"Unlimited projects","included":true},{"text":"50 GB storage","included":true},{"text":"Priority support","included":true},{"text":"Custom domain","included":false}],"buttonText":"Choose Pro","buttonUrl":""},{"name":"Business","badge":"","highlighted":false,"currency":"$","price":"79","priceYearly":"790","period":"\/mo","periodYearly":"\/yr","description":"For larger organisations","features":[{"text":"Unlimited projects","included":true},{"text":"1 TB storage","included":true},{"text":"Priority support","included":true},{"text":"Custom domain","included":true}],"buttonText":"Choose Business","buttonUrl":""}]},"columns":{"type":"string","default":"3"},"preset":{"type":"string","default":"modern"},"enableBilling":{"type":"boolean","default":false},"monthlyLabel":{"type":"string","default":"Monthly"},"yearlyLabel":{"type":"string","default":"Yearly"},"yearlyBadge":{"type":"string","default":""},"accentColor":{"type":"string","default":""},"cardBackground":{"type":"string","default":""},"headingColor":{"type":"string","default":""},"priceColor":{"type":"string","default":""},"textColor":{"type":"string","default":""},"nameTypography":{"type":"object","default":{}},"priceTypography":{"type":"object","default":{}},"cardGap":{"type":"object","default":{"value":24,"unit":"px"}},"cardPadding":{"type":"object","default":{}},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"plans":[{"name":"Pro","badge":"Popular","highlighted":true,"currency":"$","price":"29","period":"\/mo","description":"For teams","features":[{"text":"Unlimited","included":true}],"buttonText":"Choose Pro"}]}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"etu\/social-share":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/social-share","version":"1.0.0","title":"Social Share","category":"etu-blocks","icon":"share","description":"Accessible share buttons \u2014 social networks, copy link and native device share, built on the Interactivity API.","keywords":["share","social","sharing","copy link"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"]},"attributes":{"preset":{"type":"string","default":"solid"},"buttonShape":{"type":"string","default":"rounded"},"shareAlign":{"type":"string","default":"left"},"showLabels":{"type":"boolean","default":true},"useBrandColors":{"type":"boolean","default":true},"networks":{"type":"array","default":["facebook","x","linkedin","copy"]},"iconSize":{"type":"object","default":{}},"buttonGap":{"type":"object","default":{}},"accentColor":{"type":"string","default":""},"labelTypography":{"type":"object","default":{}},"shareUrl":{"type":"string","default":""},"shareText":{"type":"string","default":""},"openInNewTab":{"type":"boolean","default":true},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"preset":"solid","networks":["facebook","x","linkedin","copy"]}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"etu\/countdown":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/countdown","version":"1.0.0","title":"Countdown","category":"etu-blocks","icon":"clock","description":"A countdown timer to a fixed date or an evergreen per-visitor duration, with an accessible text equivalent and a completion message.","keywords":["countdown","timer","clock","deadline","evergreen"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"]},"attributes":{"mode":{"type":"string","default":"date"},"targetDate":{"type":"string","default":""},"evDays":{"type":"number","default":0},"evHours":{"type":"number","default":24},"evMinutes":{"type":"number","default":0},"showLabels":{"type":"boolean","default":true},"hideSeconds":{"type":"boolean","default":false},"onComplete":{"type":"string","default":"message"},"completedText":{"type":"string","default":""},"preset":{"type":"string","default":"cards"},"contentAlign":{"type":"string","default":"center"},"accentColor":{"type":"string","default":""},"numberColor":{"type":"string","default":""},"labelColor":{"type":"string","default":""},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"mode":"evergreen","evHours":24,"preset":"cards"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"etu\/modal":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/modal","version":"1.0.0","title":"Modal \/ Popup","category":"etu-blocks","icon":"external","description":"An accessible modal dialog \u2014 open it from a button, on page load, or after a delay. Put any blocks inside. Built on the Interactivity API.","keywords":["modal","popup","dialog","lightbox","overlay"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"interactivity":true},"attributes":{"trigger":{"type":"string","default":"button"},"buttonText":{"type":"string","default":"Open"},"buttonAlign":{"type":"string","default":"left"},"delaySeconds":{"type":"number","default":3},"showOnce":{"type":"boolean","default":false},"dialogLabel":{"type":"string","default":""},"size":{"type":"string","default":"medium"},"position":{"type":"string","default":"center"},"animation":{"type":"string","default":"zoom"},"showClose":{"type":"boolean","default":true},"closeOnBackdrop":{"type":"boolean","default":true},"accentColor":{"type":"string","default":""},"overlayColor":{"type":"string","default":""},"overlayOpacity":{"type":"object","default":{}},"modalBackground":{"type":"string","default":""},"modalRadius":{"type":"object","default":{}},"modalPadding":{"type":"object","default":{}},"blockId":{"type":"string","default":""}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"etu\/info-box":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/info-box","version":"1.0.0","title":"Info Box","category":"etu-blocks","icon":"info-outline","description":"An icon, heading, description and optional button \u2014 the classic marketing feature box.","keywords":["info","feature","icon box","card"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"align":["wide","full"]},"attributes":{"icon":{"type":"string","default":""},"title":{"type":"string","default":""},"description":{"type":"string","default":""},"buttonText":{"type":"string","default":""},"buttonUrl":{"type":"string","default":""},"buttonNewTab":{"type":"boolean","default":false},"iconPosition":{"type":"string","default":"stacked"},"headingLevel":{"type":"string","default":"h3"},"blockId":{"type":"string","default":""},"preset":{"type":"string","default":"card"},"accentColor":{"type":"string","default":""},"iconColor":{"type":"string","default":""},"titleColor":{"type":"string","default":""},"descriptionColor":{"type":"string","default":""},"titleTypography":{"type":"object","default":{}},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"icon":"\u2605","title":"Feature title","description":"A short description of this feature goes here.","buttonText":"Learn more","buttonUrl":"https:\/\/example.com"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/render.php"},"etu\/cta":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/cta","version":"1.0.0","title":"Call to Action","category":"etu-blocks","icon":"megaphone","description":"A heading, supporting text and buttons to drive the next action.","keywords":["cta","call to action","button","banner"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"align":["wide","full"]},"attributes":{"heading":{"type":"string","default":""},"description":{"type":"string","default":""},"primaryText":{"type":"string","default":""},"primaryUrl":{"type":"string","default":""},"secondaryText":{"type":"string","default":""},"secondaryUrl":{"type":"string","default":""},"buttonNewTab":{"type":"boolean","default":false},"preset":{"type":"string","default":"centered"},"contentAlign":{"type":"string","default":"center"},"accentColor":{"type":"string","default":""},"headingColor":{"type":"string","default":""},"descriptionColor":{"type":"string","default":""},"headingTypography":{"type":"object","default":{}},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"heading":"Ready to build faster?","description":"Accessible, interactive blocks \u2014 free.","primaryText":"Get started","primaryUrl":"https:\/\/example.com","preset":"banner"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/render.php"},"etu\/map":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/map","version":"1.0.0","title":"Google Map","category":"etu-blocks","icon":"location-alt","description":"A premium Google Map embed with a privacy-first click-to-load facade, an info card, directions link, map types and styling \u2014 no API key required.","keywords":["map","google map","location","address","directions"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"]},"attributes":{"query":{"type":"string","default":""},"zoom":{"type":"number","default":14},"mapType":{"type":"string","default":"m"},"aspectRatio":{"type":"string","default":"16x9"},"clickToLoad":{"type":"boolean","default":true},"grayscale":{"type":"boolean","default":false},"title":{"type":"string","default":""},"address":{"type":"string","default":""},"showInfoCard":{"type":"boolean","default":true},"showDirections":{"type":"boolean","default":true},"rounded":{"type":"object","default":{}},"accentColor":{"type":"string","default":""},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"query":"Eiffel Tower, Paris","title":"Eiffel Tower","address":"Champ de Mars, Paris"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"etu\/team-member":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/team-member","version":"1.0.0","title":"Team Member","category":"etu-blocks","icon":"businessperson","description":"A team member card with photo, name, role, bio and social links.","keywords":["team","member","person","author","profile"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"align":["wide","full"]},"attributes":{"name":{"type":"string","default":""},"role":{"type":"string","default":""},"bio":{"type":"string","default":""},"avatarUrl":{"type":"string","default":""},"avatarId":{"type":"number","default":0},"preset":{"type":"string","default":"card"},"contentAlign":{"type":"string","default":"center"},"accentColor":{"type":"string","default":""},"nameColor":{"type":"string","default":""},"roleColor":{"type":"string","default":""},"bioColor":{"type":"string","default":""},"socialColor":{"type":"string","default":""},"overlayColor":{"type":"string","default":""},"overlayOpacity":{"type":"object","default":{}},"avatarRadius":{"type":"object","default":{}},"nameTypography":{"type":"object","default":{}},"roleTypography":{"type":"object","default":{}},"socialTwitter":{"type":"string","default":""},"socialLinkedin":{"type":"string","default":""},"socialGithub":{"type":"string","default":""},"socialWebsite":{"type":"string","default":""},"socialEmail":{"type":"string","default":""},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"name":"Jordan Lee","role":"Product Designer","bio":"Designs delightful, accessible interfaces.","preset":"card"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/render.php"},"etu\/testimonial":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/testimonial","version":"1.0.0","title":"Testimonial","category":"etu-blocks","icon":"format-quote","description":"A customer quote with avatar, name, role and an optional star rating.","keywords":["testimonial","quote","review","rating"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"align":["wide","full"]},"attributes":{"quote":{"type":"string","default":""},"authorName":{"type":"string","default":""},"authorRole":{"type":"string","default":""},"avatarUrl":{"type":"string","default":""},"avatarId":{"type":"number","default":0},"rating":{"type":"number","default":5},"showRating":{"type":"boolean","default":true},"preset":{"type":"string","default":"card"},"contentAlign":{"type":"string","default":"left"},"accentColor":{"type":"string","default":""},"quoteColor":{"type":"string","default":""},"authorColor":{"type":"string","default":""},"quoteTypography":{"type":"object","default":{}},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"quote":"This plugin transformed how we build pages \u2014 fast, accessible, and beautiful.","authorName":"Jordan Lee","authorRole":"Product Designer","rating":5,"preset":"card"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/render.php"},"etu\/lottie":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/lottie","version":"1.0.0","title":"Lottie","category":"etu-blocks","icon":"video-alt2","description":"Play a Lottie (JSON) animation with autoplay, on-scroll, hover or click triggers \u2014 accessible and reduced-motion aware. The player is bundled, not loaded from a CDN.","keywords":["lottie","animation","svg","motion","json"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"]},"attributes":{"source":{"type":"string","default":"url"},"src":{"type":"string","default":""},"file":{"type":"object","default":{}},"trigger":{"type":"string","default":"viewport"},"loop":{"type":"boolean","default":true},"speedPct":{"type":"number","default":100},"maxWidth":{"type":"object","default":{}},"align":{"type":"string","default":"center"},"title":{"type":"string","default":""},"decorative":{"type":"boolean","default":true},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"trigger":"viewport"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"etu\/progress-bar":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/progress-bar","version":"1.0.0","title":"Progress Bar","category":"etu-blocks","icon":"performance","description":"A labelled progress bar that fills when it scrolls into view.","keywords":["progress","bar","skill","meter"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"]},"attributes":{"label":{"type":"string","default":"Design"},"value":{"type":"number","default":75},"showValue":{"type":"boolean","default":true},"preset":{"type":"string","default":"rounded"},"height":{"type":"object","default":{}},"accentColor":{"type":"string","default":""},"trackColor":{"type":"string","default":""},"labelColor":{"type":"string","default":""},"labelTypography":{"type":"object","default":{}},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"label":"Accessibility","value":92,"preset":"rounded"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"etu\/notice":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/notice","version":"1.0.0","title":"Notice","category":"etu-blocks","icon":"info","description":"A coloured callout \u2014 info, success, warning or danger \u2014 with an optional dismiss.","keywords":["notice","alert","callout","message"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"]},"attributes":{"title":{"type":"string","default":""},"content":{"type":"string","default":""},"icon":{"type":"string","default":""},"preset":{"type":"string","default":"info"},"display":{"type":"string","default":"inline"},"noticeAlign":{"type":"string","default":""},"dismissible":{"type":"boolean","default":true},"rememberDismiss":{"type":"boolean","default":false},"accentColor":{"type":"string","default":""},"noticeBackground":{"type":"string","default":""},"noticeTextColor":{"type":"string","default":""},"noticeRadius":{"type":"object","default":{}},"noticeShadowColor":{"type":"string","default":""},"titleTypography":{"type":"object","default":{}},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"preset":"success","title":"You're all set","content":"Your changes were saved successfully."}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"etu\/faq":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/faq","version":"1.0.0","title":"FAQ","category":"etu-blocks","icon":"editor-help","description":"An accessible accordion of questions and answers, with optional FAQ schema.","keywords":["faq","accordion","questions","toggle"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"]},"attributes":{"items":{"type":"array","default":[{"question":"What is Etu Blocks?","answer":"An accessible, interactive block library for WordPress."},{"question":"Is it accessible?","answer":"Yes \u2014 every block is built to WCAG 2.2 AA."}]},"allowMultipleOpen":{"type":"boolean","default":false},"showSchema":{"type":"boolean","default":true},"blockId":{"type":"string","default":""},"preset":{"type":"string","default":"boxed"},"accentColor":{"type":"string","default":""},"questionColor":{"type":"string","default":""},"answerColor":{"type":"string","default":""},"questionTypography":{"type":"object","default":{}},"itemPadding":{"type":"object","default":{}},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"preset":"boxed","items":[{"question":"What is Etu Blocks?","answer":"An accessible, interactive block library for WordPress."},{"question":"Is it accessible?","answer":"Yes \u2014 every block is built to WCAG 2.2 AA."}]}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"etu\/slides":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/slides","version":"1.0.0","title":"Slides \/ Carousel","category":"etu-blocks","icon":"slides","description":"An accessible content carousel \u2014 put any blocks in each slide. Arrows, dots, autoplay and touch, built on the Interactivity API.","keywords":["carousel","slider","slides","gallery"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"]},"attributes":{"perView":{"type":"object","default":{"desktop":3,"tablet":2,"mobile":1}},"gap":{"type":"object","default":{"value":16,"unit":"px"}},"showArrows":{"type":"boolean","default":true},"arrowPosition":{"type":"string","default":"edge"},"showDots":{"type":"boolean","default":true},"autoplay":{"type":"boolean","default":false},"autoplaySpeed":{"type":"number","default":5},"loop":{"type":"boolean","default":true},"pauseOnHover":{"type":"boolean","default":true},"accentColor":{"type":"string","default":""},"ariaLabel":{"type":"string","default":""},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"perView":{"desktop":3,"tablet":2,"mobile":1}},"innerBlocks":[{"name":"etu\/slide","innerBlocks":[{"name":"core\/paragraph","attributes":{"content":"Slide one"}}]},{"name":"etu\/slide","innerBlocks":[{"name":"core\/paragraph","attributes":{"content":"Slide two"}}]}]},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"etu\/icon-list":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/icon-list","version":"1.0.0","title":"Icon List","category":"etu-blocks","icon":"editor-ul","description":"A list of items each with its own icon \u2014 perfect for feature and benefit lists.","keywords":["icon list","checklist","features","list"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"align":["wide","full"]},"attributes":{"items":{"type":"array","default":[{"icon":"\u2713","text":"Accessible by default"},{"icon":"\u2713","text":"Built on the Interactivity API"},{"icon":"\u2713","text":"Premium presets \u2014 free"}]},"preset":{"type":"string","default":"checklist"},"columns":{"type":"string","default":"1"},"contentAlign":{"type":"string","default":"left"},"accentColor":{"type":"string","default":""},"iconColor":{"type":"string","default":""},"textColor":{"type":"string","default":""},"textTypography":{"type":"object","default":{}},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"preset":"checklist","items":[{"icon":"\u2713","text":"Accessible by default"},{"icon":"\u2713","text":"Interactivity API powered"}]}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/render.php"},"etu\/toc":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/toc","version":"1.0.0","title":"Table of Contents","category":"etu-blocks","icon":"list-view","description":"An accessible table of contents built automatically from the page's headings \u2014 with smooth scroll, active-section highlighting and an optional collapse.","keywords":["table of contents","toc","index","navigation","anchors"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide"]},"attributes":{"title":{"type":"string","default":"Table of contents"},"showTitle":{"type":"boolean","default":true},"listType":{"type":"string","default":"number"},"minLevel":{"type":"string","default":"2"},"maxLevel":{"type":"string","default":"4"},"preset":{"type":"string","default":"boxed"},"collapsible":{"type":"boolean","default":false},"initialCollapsed":{"type":"boolean","default":false},"sticky":{"type":"boolean","default":false},"smoothScroll":{"type":"boolean","default":true},"scrollspy":{"type":"boolean","default":true},"accentColor":{"type":"string","default":""},"background":{"type":"string","default":""},"textColor":{"type":"string","default":""},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"title":"Table of contents"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"etu\/post-filter":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/post-filter","version":"1.0.0","title":"Post Filter","category":"etu-blocks","icon":"filter","description":"A filterable post grid: search, taxonomy dropdowns and reset update the results live via the Interactivity API \u2014 with a full no-JavaScript fallback.","keywords":["filter","search","posts","taxonomy","ajax"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"]},"attributes":{"postType":{"type":"string","default":"post"},"filterTaxonomies":{"type":"array","default":["category"]},"enableSearch":{"type":"boolean","default":true},"enableReset":{"type":"boolean","default":true},"perPage":{"type":"number","default":9},"columns":{"type":"string","default":"3"},"orderBy":{"type":"string","default":"date"},"order":{"type":"string","default":"desc"},"cardStyle":{"type":"string","default":"card"},"overlayColor":{"type":"string","default":""},"overlayOpacity":{"type":"object","default":{}},"showImage":{"type":"boolean","default":true},"imageRatio":{"type":"string","default":"landscape"},"showPlaceholder":{"type":"boolean","default":true},"hoverEffect":{"type":"string","default":"lift"},"showCategory":{"type":"boolean","default":false},"showDate":{"type":"boolean","default":true},"showExcerpt":{"type":"boolean","default":true},"excerptWords":{"type":"number","default":20},"showButton":{"type":"boolean","default":false},"buttonText":{"type":"string","default":""},"accentColor":{"type":"string","default":""},"cardBg":{"type":"string","default":""},"titleColor":{"type":"string","default":""},"textColor":{"type":"string","default":""},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"postType":"post","columns":"3"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"etu\/taxonomy":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/taxonomy","version":"1.0.0","title":"Taxonomy","category":"etu-blocks","icon":"category","description":"A visual browser for any taxonomy \u2014 term cards with a representative image, description and post count, as a grid, list or pills.","keywords":["taxonomy","categories","terms","tags","browse"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"align":["wide","full"]},"attributes":{"taxonomy":{"type":"string","default":"category"},"layout":{"type":"string","default":"grid"},"columns":{"type":"string","default":"4"},"imageSource":{"type":"string","default":"auto"},"showCount":{"type":"boolean","default":true},"showDescription":{"type":"boolean","default":false},"hideEmpty":{"type":"boolean","default":true},"orderBy":{"type":"string","default":"name"},"order":{"type":"string","default":"asc"},"number":{"type":"number","default":0},"parentScope":{"type":"string","default":"all"},"accentColor":{"type":"string","default":""},"cardBg":{"type":"string","default":""},"textColor":{"type":"string","default":""},"countColor":{"type":"string","default":""},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"taxonomy":"category","layout":"grid"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/render.php"},"etu\/timeline":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/timeline","version":"1.0.0","title":"Timeline","category":"etu-blocks","icon":"clock","description":"A vertical timeline of dated events \u2014 for histories, roadmaps and milestones.","keywords":["timeline","history","roadmap","events"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"align":["wide","full"]},"attributes":{"items":{"type":"array","default":[{"date":"2024","title":"Founded","description":"The project began as an open idea."},{"date":"2025","title":"First release","description":"Shipped the initial block library."},{"date":"2026","title":"WordPress 7.0","description":"Rebuilt on the Interactivity API."}]},"preset":{"type":"string","default":"line"},"accentColor":{"type":"string","default":""},"dateColor":{"type":"string","default":""},"titleColor":{"type":"string","default":""},"descColor":{"type":"string","default":""},"titleTypography":{"type":"object","default":{}},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"preset":"line","items":[{"date":"2025","title":"First release","description":"Shipped the library."},{"date":"2026","title":"WordPress 7.0","description":"Interactivity API."}]}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/render.php"},"etu\/tabs":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/tabs","version":"1.0.0","title":"Tabs","category":"etu-blocks","icon":"index-card","description":"Accessible tabbed content following the ARIA Tabs pattern, with full keyboard navigation.","keywords":["tabs","tabbed","panels","accordion"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"]},"attributes":{"tabs":{"type":"array","default":[{"label":"Tab One","content":"Content for the first tab."},{"label":"Tab Two","content":"Content for the second tab."}]},"ariaLabel":{"type":"string","default":""},"blockId":{"type":"string","default":""},"preset":{"type":"string","default":"line"},"tabAlign":{"type":"string","default":"left"},"tabGap":{"type":"object","default":{}},"tabTextColor":{"type":"string","default":""},"tabTextColorHover":{"type":"string","default":""},"tabActiveColor":{"type":"string","default":""},"accentColor":{"type":"string","default":""},"tabTypography":{"type":"object","default":{}},"tabPadding":{"type":"object","default":{}},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"preset":"line","tabs":[{"label":"Overview","content":"A quick overview lives in the first tab."},{"label":"Details","content":"More detail lives in the second tab."}]}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"etu\/video-popup":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/video-popup","version":"1.0.0","title":"Video Popup","category":"etu-blocks","icon":"video-alt3","description":"A poster with a play button that opens the video in an accessible dialog. The YouTube\/Vimeo embed loads only on click \u2014 no third-party scripts or cookies until then.","keywords":["video","popup","lightbox","youtube","vimeo"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"]},"attributes":{"videoType":{"type":"string","default":"youtube"},"videoUrl":{"type":"string","default":""},"videoFile":{"type":"object","default":{}},"posterImage":{"type":"object","default":{}},"title":{"type":"string","default":""},"showTitle":{"type":"boolean","default":false},"autoplay":{"type":"boolean","default":true},"aspectRatio":{"type":"string","default":"16x9"},"accentColor":{"type":"string","default":""},"overlayColor":{"type":"string","default":""},"overlayOpacity":{"type":"object","default":{}},"rounded":{"type":"object","default":{}},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"videoType":"youtube","title":"Watch the demo","showTitle":true}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"etu\/star-rating":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/star-rating","version":"1.0.0","title":"Star Rating","category":"etu-blocks","icon":"star-filled","description":"A star (or heart \/ circle) rating with optional label and value.","keywords":["rating","stars","review","score"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"align":["wide","full"]},"attributes":{"rating":{"type":"number","default":4.5},"maxStars":{"type":"number","default":5},"showValue":{"type":"boolean","default":true},"label":{"type":"string","default":""},"preset":{"type":"string","default":"star"},"size":{"type":"object","default":{}},"contentAlign":{"type":"string","default":"left"},"accentColor":{"type":"string","default":""},"emptyColor":{"type":"string","default":""},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"rating":4.5,"showValue":true,"preset":"star"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/render.php"},"etu\/banner":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/banner","version":"1.0.0","title":"Banner","category":"etu-blocks","icon":"cover-image","description":"A premium hero banner \u2014 background image with overlay, headline, text and buttons, with height and content-position controls.","keywords":["banner","hero","cover","header","call to action"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"align":["wide","full"]},"attributes":{"eyebrow":{"type":"string","default":""},"heading":{"type":"string","default":"Build something people love"},"text":{"type":"string","default":"A short, punchy supporting line that sets up your call to action."},"primaryText":{"type":"string","default":"Get started"},"primaryUrl":{"type":"string","default":""},"secondaryText":{"type":"string","default":""},"secondaryUrl":{"type":"string","default":""},"bgColor":{"type":"string","default":""},"bgImage":{"type":"object","default":{}},"overlayColor":{"type":"string","default":""},"overlayOpacity":{"type":"object","default":{}},"heightPreset":{"type":"string","default":"medium"},"contentAlign":{"type":"string","default":"center"},"verticalAlign":{"type":"string","default":"center"},"contentWidth":{"type":"object","default":{}},"accentColor":{"type":"string","default":""},"textColor":{"type":"string","default":""},"headingTypography":{"type":"object","default":{}},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"heading":"Build something people love","text":"A short supporting line."}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/render.php"},"etu\/before-after":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/before-after","version":"1.0.0","title":"Before \/ After","category":"etu-blocks","icon":"image-flip-horizontal","description":"An accessible before\/after image comparison slider \u2014 drag or use the keyboard to reveal, built on the Interactivity API.","keywords":["before after","comparison","image slider","reveal","juxtapose"],"textdomain":"etu-blocks","supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"]},"attributes":{"beforeImage":{"type":"object","default":{}},"afterImage":{"type":"object","default":{}},"beforeLabel":{"type":"string","default":"Before"},"afterLabel":{"type":"string","default":"After"},"showLabels":{"type":"boolean","default":true},"startPosition":{"type":"number","default":50},"orientation":{"type":"string","default":"horizontal"},"aspectRatio":{"type":"string","default":"16x9"},"accentColor":{"type":"string","default":""},"rounded":{"type":"object","default":{}},"blockId":{"type":"string","default":""},"blockPadding":{"type":"object","default":{}},"blockMargin":{"type":"object","default":{}}},"example":{"attributes":{"beforeLabel":"Before","afterLabel":"After","startPosition":50}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"etu\/slide":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"etu\/slide","version":"1.0.0","title":"Slide","category":"etu-blocks","icon":"align-center","description":"A single slide inside a Slides \/ Carousel block. Holds any blocks.","textdomain":"etu-blocks","parent":["etu\/slides"],"supports":{"html":false,"reusable":false,"inserter":false},"editorScript":"file:.\/index.js"}},"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3720632,"resolution":"1","location":"assets","locale":"","width":1700,"height":880},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3720632,"resolution":"10","location":"assets","locale":"","width":1700,"height":880},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3720632,"resolution":"2","location":"assets","locale":"","width":1700,"height":880},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3720632,"resolution":"3","location":"assets","locale":"","width":1919,"height":880},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3720632,"resolution":"4","location":"assets","locale":"","width":1700,"height":880},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3720632,"resolution":"5","location":"assets","locale":"","width":1700,"height":875},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3720632,"resolution":"6","location":"assets","locale":"","width":1700,"height":875},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3720632,"resolution":"7","location":"assets","locale":"","width":1700,"height":879},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3720632,"resolution":"8","location":"assets","locale":"","width":1700,"height":876},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3720632,"resolution":"9","location":"assets","locale":"","width":1740,"height":878}},"screenshots":{"1":"Dashboard \u2014 search, filter by type, enable\/disable per block with usage counts and a light\/dark toggle.","2":"Post Filter \u2014 live search + taxonomy filter over a responsive card grid, with the Overlay preset.","3":"Post Grid \u2014 masonry, carousel, and premium card presets (Elevated, Bordered, Minimal, Overlay).","4":"Video Popup \u2014 the privacy-first facade before load, and the accessible dialog after.","5":"Google Map \u2014 the click-to-load facade with the info card and directions button.","6":"Before \/ After \u2014 the image comparison slider with keyboard focus on the handle.","7":"Modal \/ Popup \u2014 the accessible dialog with focus trap, Esc-to-close, and backdrop dismiss.","8":"Tabs \u2014 the ARIA Tabs pattern with roving keyboard focus.","9":"Pricing Table \u2014 plan cards with the monthly \/ annual radio toggle.","10":"Data Table \u2014 sortable columns, live search, sticky header, and responsive stacking."}},"plugin_section":[],"plugin_tags":[1953,148857,4121,148076,152129],"plugin_category":[34],"plugin_contributors":[263109],"plugin_business_model":[],"class_list":["post-371633","plugin","type-plugin","status-publish","hentry","plugin_tags-accessibility","plugin_tags-block-editor","plugin_tags-blocks","plugin_tags-gutenberg","plugin_tags-gutenberg-blocks","plugin_category-accessibility","plugin_contributors-rayetun","plugin_committers-rayetun"],"banners":{"banner":"https:\/\/ps.w.org\/etu-blocks\/assets\/banner-772x250.png?rev=3720632","banner_2x":"https:\/\/ps.w.org\/etu-blocks\/assets\/banner-1544x500.png?rev=3720632","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/etu-blocks\/assets\/icon.svg?rev=3720632","icon":"https:\/\/ps.w.org\/etu-blocks\/assets\/icon.svg?rev=3720632","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/etu-blocks\/assets\/screenshot-1.png?rev=3720632","caption":"Dashboard \u2014 search, filter by type, enable\/disable per block with usage counts and a light\/dark toggle."},{"src":"https:\/\/ps.w.org\/etu-blocks\/assets\/screenshot-2.png?rev=3720632","caption":"Post Filter \u2014 live search + taxonomy filter over a responsive card grid, with the Overlay preset."},{"src":"https:\/\/ps.w.org\/etu-blocks\/assets\/screenshot-3.png?rev=3720632","caption":"Post Grid \u2014 masonry, carousel, and premium card presets (Elevated, Bordered, Minimal, Overlay)."},{"src":"https:\/\/ps.w.org\/etu-blocks\/assets\/screenshot-4.png?rev=3720632","caption":"Video Popup \u2014 the privacy-first facade before load, and the accessible dialog after."},{"src":"https:\/\/ps.w.org\/etu-blocks\/assets\/screenshot-5.png?rev=3720632","caption":"Google Map \u2014 the click-to-load facade with the info card and directions button."},{"src":"https:\/\/ps.w.org\/etu-blocks\/assets\/screenshot-6.png?rev=3720632","caption":"Before \/ After \u2014 the image comparison slider with keyboard focus on the handle."},{"src":"https:\/\/ps.w.org\/etu-blocks\/assets\/screenshot-7.png?rev=3720632","caption":"Modal \/ Popup \u2014 the accessible dialog with focus trap, Esc-to-close, and backdrop dismiss."},{"src":"https:\/\/ps.w.org\/etu-blocks\/assets\/screenshot-8.png?rev=3720632","caption":"Tabs \u2014 the ARIA Tabs pattern with roving keyboard focus."},{"src":"https:\/\/ps.w.org\/etu-blocks\/assets\/screenshot-9.png?rev=3720632","caption":"Pricing Table \u2014 plan cards with the monthly \/ annual radio toggle."},{"src":"https:\/\/ps.w.org\/etu-blocks\/assets\/screenshot-10.png?rev=3720632","caption":"Data Table \u2014 sortable columns, live search, sticky header, and responsive stacking."}],"raw_content":"<!--section=description-->\n<p>\ud83e\uddf1 <strong>Etu Blocks is a focused, accessible block library \u2014 and all of it is free.<\/strong><\/p>\n\n<p><strong>1. Accessible by construction.<\/strong> Every interactive block is built keyboard-operable and screen-reader-correct <em>from the first line of code<\/em>, against <strong>WCAG 2.2 Level AA<\/strong> \u2014 real dialog semantics, real range inputs, real focus management, real ARIA state that can't drift from what you see. Accessibility is a merge gate, not a polish pass.<\/p>\n\n<p><strong>2. Interactive without bloat.<\/strong> Front-end behaviour runs on the native <strong>WordPress Interactivity API<\/strong> \u2014 no jQuery, no framework runtime, no build system on your visitors' pages. Each block's script loads only where it's used, and the content is server-rendered first, so it works even before that script loads \u2014 or if it never does.<\/p>\n\n<p>Etu Blocks does not reinvent core blocks \u2014 it builds only what core has no equal for, held to a premium bar: shared design tokens, a schema-driven Inspector every block inherits, and multiple presets per block.<\/p>\n\n<p><strong>This plugin is free, in full.<\/strong><\/p>\n\n<p>No locked panels, no \"upgrade to unlock\", no nag screens, no paywall \u2014 every block and every control described here works for everyone.<\/p>\n\n<p>An <strong>Etu Blocks Pro<\/strong> add-on with additional premium blocks may follow, but nothing in this free plugin will move behind a paywall.<\/p>\n\n<h4>How Etu Blocks is organised<\/h4>\n\n<ul>\n<li><strong>Accessible by default<\/strong> \u2014 WCAG 2.2 AA is the definition of done<\/li>\n<li><strong>Interactivity API only<\/strong> \u2014 server-rendered first, no framework runtime on visitors' pages<\/li>\n<li><strong>Privacy first<\/strong> \u2014 video and map embeds use a click-to-load facade; no telemetry, no phone-home<\/li>\n<\/ul>\n\n<p>Etu Blocks ships 29 blocks across Content, Marketing, Interactive, Data, and Media groups. Every block is browsable in the editor inserter, with a full description and preview shown inline as you insert it.<\/p>\n\n\n\n<h4>\ud83e\uddf1 The Blocks<\/h4>\n\n<p><strong>Content<\/strong><\/p>\n\n<ul>\n<li>\u2753 <strong>FAQ \/ Accordion<\/strong> \u2014 the disclosure pattern, done right: each header is a real <code>&lt;button&gt;<\/code> inside a heading, <code>aria-expanded<\/code> reflects state, the panel is a <code>&lt;region&gt;<\/code> labelled by its button, and closed panels are <code>hidden<\/code> (not just clipped). Multiple presets, and an optional FAQPage JSON-LD schema for SEO.<\/li>\n<li>\ud83d\uddc2\ufe0f <strong>Tabs<\/strong> \u2014 a full <strong>ARIA Tabs<\/strong> implementation: <code>role=\"tablist\"<\/code> \/ <code>role=\"tab\"<\/code> \/ <code>role=\"tabpanel\"<\/code>, single-tab-stop keyboard navigation with arrow keys, Home\/End, and roving <code>tabindex<\/code>. Built to the pattern so a future core Tabs block is a trivial transform away.<\/li>\n<li>\ud83d\udca1 <strong>Info Box<\/strong> \u2014 icon + heading + text callout with premium presets. The icon is decorative (<code>aria-hidden<\/code>) when text carries the meaning, so screen readers aren't read a decorative glyph.<\/li>\n<li>\ud83c\udfaf <strong>Banner<\/strong> \u2014 a premium hero: background colour or image with a colour overlay, headline, text, and up to two buttons, with height, alignment, and content-width controls. Buttons render as real <code>&lt;a&gt;<\/code> links when a URL is set, or focusable <code>&lt;button&gt;<\/code> elements when not \u2014 never inert spans.<\/li>\n<li>\ud83d\udce2 <strong>Call to Action<\/strong> \u2014 heading, text, and buttons in a bold section, with the same real-link-or-real-button rule as Banner.<\/li>\n<li>\ud83d\udcac <strong>Testimonial<\/strong> \u2014 quote card with avatar and citation, on semantic <code>&lt;figure&gt;<\/code> \/ <code>&lt;blockquote&gt;<\/code> \/ <code>&lt;figcaption&gt;<\/code>. Multiple presets.<\/li>\n<li>\ud83d\udc65 <strong>Team Member<\/strong> \u2014 profile card with Card, Overlay, Horizontal, and Minimal presets. Social links are real <code>&lt;a&gt;<\/code> elements with accessible names, never icon-only.<\/li>\n<li>\ud83d\udccb <strong>Icon List<\/strong> \u2014 feature or checklist list with per-item icons. Real <code>&lt;ul&gt;<\/code> semantics \u2014 a screen reader announces \"list, 5 items\".<\/li>\n<\/ul>\n\n<p><strong>Marketing<\/strong><\/p>\n\n<ul>\n<li>\ud83d\udcb3 <strong>Pricing Table<\/strong> \u2014 premium plan cards with a featured plan, feature lists, and an optional monthly\/annual billing toggle. The toggle is a keyboard-operable radio group (not a fake switch), and the recommended plan is marked with a text badge \u2014 never colour alone.<\/li>\n<li>\u2696\ufe0f <strong>Comparison Table<\/strong> \u2014 compare plans or products side-by-side, with a highlighted column, check\/cross\/text cells, and a real <code>&lt;table&gt;<\/code> with <code>&lt;th scope&gt;<\/code> headers so the row\/column relationships are announced correctly.<\/li>\n<li>\ud83d\uddbc\ufe0f <strong>Post Grid<\/strong> \u2014 display posts as a grid, masonry, or carousel with full query controls (post type, categories, order, offset, exclude-current), premium card presets (Elevated, Bordered, Minimal, Overlay), an optional category filter bar, and carousel controls that respect reduced motion.<\/li>\n<li>\ud83c\udff7\ufe0f <strong>Taxonomy<\/strong> \u2014 a visual term browser for <em>any<\/em> public taxonomy: image-card grid, list, or pill layout. Each card uses the term's own image or the latest post's featured image as a universal fallback, cached in a transient so it isn't re-queried on every page load.<\/li>\n<\/ul>\n\n<p><strong>Interactive<\/strong><\/p>\n\n<ul>\n<li>\ud83e\ude9f <strong>Modal \/ Popup<\/strong> \u2014 an accessible dialog: <code>role=\"dialog\"<\/code> + <code>aria-modal<\/code>, focus trapped while open and restored to the trigger on close, Esc closes, backdrop dismiss is opt-in, body scroll is locked, and the background is made <code>inert<\/code> so assistive tech and keyboard focus can only reach the dialog. Opens on click, on page load, or after a delay; holds any blocks.<\/li>\n<li>\ud83c\udfac <strong>Video Popup<\/strong> \u2014 a video lightbox on the same accessible dialog recipe, with a <strong>privacy-first click-to-load facade<\/strong>: the YouTube (via <code>youtube-nocookie.com<\/code>), Vimeo (with <code>dnt=1<\/code>), or self-hosted video is requested <strong>only when the visitor opens it<\/strong> \u2014 no third-party requests, cookies, or autoplay on page view \u2014 and closing actually stops playback. Focus is moved in and returned.<\/li>\n<li>\ud83c\udfa0 <strong>Slides \/ Carousel<\/strong> \u2014 put any blocks in each slide; a genuine keyboard-scrollable region (nothing hidden from screen readers), with real prev\/next and dot controls, arrows, opt-in autoplay that ships a real pause button and never runs under reduced motion.<\/li>\n<li>\ud83d\udd00 <strong>Before \/ After<\/strong> \u2014 an image comparison you can operate with the <strong>keyboard<\/strong>, not just the mouse. Built on a real <code>&lt;input type=\"range\"&gt;<\/code>, so arrow keys move the divider, dragging works, and the position is announced as a percentage via <code>aria-valuetext<\/code>. Horizontal or vertical.<\/li>\n<li>\u23f3 <strong>Countdown<\/strong> \u2014 a countdown to a fixed date or an evergreen per-visitor duration. The ticking digits are <strong>hidden from screen readers<\/strong>, so a screen-reader user isn't read a new number every second, while a <code>role=\"timer\"<\/code> container carries a descriptive label and the end is announced once via a polite live region.<\/li>\n<li>\ud83d\udd0d <strong>Post Filter<\/strong> \u2014 a filterable post grid: a search field, taxonomy dropdowns, and a reset button. Filtering happens live over a REST endpoint (<code>etu\/v1\/posts<\/code>) \u2014 but the bar is a real GET <code>&lt;form&gt;<\/code> and Load-more is a real link, so <strong>everything works with JavaScript disabled<\/strong>. Card and Overlay presets, with an inline SVG placeholder for posts that have no featured image.<\/li>\n<li>\ud83e\udded <strong>Table of Contents<\/strong> \u2014 auto-built from your headings, as a real <code>&lt;nav&gt;<\/code> landmark. Multiple presets, an optional collapse, sticky positioning, smooth scroll with reduced-motion respect, and active-section highlighting as you scroll.<\/li>\n<li>\ud83d\udd17 <strong>Social Share<\/strong> \u2014 accessible share buttons (social networks, copy link, native device share) on real <code>&lt;a&gt;<\/code> \/ <code>&lt;button&gt;<\/code> elements with accessible names, powered by the Interactivity API.<\/li>\n<li>\ud83d\udd14 <strong>Notice<\/strong> \u2014 dismissible callout, inline or as a fixed top\/bottom announcement bar. Persistent dismissal via <code>localStorage<\/code> so it doesn't reappear on the next page load.<\/li>\n<li>\ud83d\udd22 <strong>Counter<\/strong> \u2014 an animated number that counts up when it scrolls into view. The final value is present in the DOM immediately for search engines and no-JS visitors; under reduced motion the animation is skipped and the final value stays put.<\/li>\n<li>\ud83d\udcc8 <strong>Progress Bar<\/strong> \u2014 labelled progress meter with <code>role=\"progressbar\"<\/code> and <code>aria-valuenow<\/code>, animated to its target when scrolled into view, still under reduced motion.<\/li>\n<li>\u2b50 <strong>Star Rating<\/strong> \u2014 an accessible rating display, exposed to screen readers as \"Rated 4.5 out of 5\" rather than five unlabelled symbols.<\/li>\n<li>\ud83d\udc63 <strong>Steps<\/strong> \u2014 numbered process list.<\/li>\n<li>\ud83d\udcc5 <strong>Timeline<\/strong> \u2014 dated vertical timeline.<\/li>\n<\/ul>\n\n<p><strong>Data<\/strong><\/p>\n\n<ul>\n<li>\ud83d\udcca <strong>Data Table<\/strong> \u2014 a real, optionally sortable <code>&lt;table&gt;<\/code> with a <code>&lt;caption&gt;<\/code>, <code>&lt;th scope=\"col\"&gt;<\/code> headers, sort changes announced via <code>aria-sort<\/code>, live search with a polite result count, sticky header, striped\/bordered\/compact styles, and a focusable scroll region for narrow screens (or a stack-to-cards mode).<\/li>\n<\/ul>\n\n<p><strong>Media &amp; integrations<\/strong><\/p>\n\n<ul>\n<li>\ud83d\udccd <strong>Google Map<\/strong> \u2014 a <strong>keyless<\/strong> Google Maps embed (no API key to configure or leak) with a privacy-first click-to-load facade, a floating info card with title + address, and a keyless \"Get directions\" link. Road \/ Satellite \/ Hybrid \/ Terrain, aspect ratios, and an optional colour-on-hover grayscale.<\/li>\n<li>\ud83c\udf9e\ufe0f <strong>Lottie<\/strong> \u2014 plays a Lottie animation with autoplay, on-scroll, hover\/focus, or click triggers. Supports both <code>.json<\/code> and <code>.lottie<\/code> (dotLottie) \u2014 the archive is fetched and unzipped in the browser. Player is <strong>bundled<\/strong>, not loaded from a CDN. Reduced motion suppresses auto triggers and leaves a still first frame; hover and click stay available. Uploads: a small helper class lets logged-in editors upload <code>.json<\/code> and <code>.lottie<\/code> files to the Media Library (safely \u2014 a non-JSON file smuggled as <code>.json<\/code> is rejected).<\/li>\n<\/ul>\n\n<p>Every dot, arrow, close button, and toggle meets the WCAG 2.2 24\u00d724px target-size minimum.<\/p>\n\n\n\n<h3>External Services<\/h3>\n\n<p>Etu Blocks itself sends no data anywhere. There is no telemetry, no account, and no phone-home. However, several blocks <em>can<\/em> embed third-party content \u2014 and only then, and only in a visitor's browser:<\/p>\n\n<p><strong>Google Maps \u2014 Google Map block (only when the map is loaded)<\/strong>\nWhen a page contains an Etu Google Map block, the visitor's browser can load a map from Google Maps (<code>https:\/\/maps.google.com\/maps<\/code>) and, when the \"Get directions\" button is used, open Google Maps' directions (<code>https:\/\/www.google.com\/maps\/dir\/<\/code>). The block ships a <strong>privacy-first click-to-load facade<\/strong> by default, so no request is made to Google until the visitor clicks \"Load map\". A site owner can turn this facade off per block to load the map on page view instead.\nData sent: the location (address or place name) the site owner typed into the block, plus what the visitor's browser normally sends to any embedded iframe (IP address, user agent, cookies).\nSent when: only when the visitor clicks \"Load map\" (default), or on page view if the site owner disabled the facade. A page with no Map block contacts no external service.\nService URL: https:\/\/maps.google.com\nTerms of Service: https:\/\/cloud.google.com\/maps-platform\/terms\nPrivacy Policy: https:\/\/policies.google.com\/privacy<\/p>\n\n<p><strong>YouTube \u2014 Video Popup block (only when a visitor plays a YouTube video)<\/strong>\nWhen a Video Popup block points to a YouTube URL, the video is loaded from the privacy-enhanced host <code>https:\/\/www.youtube-nocookie.com\/<\/code> \u2014 but <strong>only when the visitor clicks Play<\/strong>, never on page load. Closing the popup clears the iframe so playback stops entirely.\nData sent: the video ID the site owner entered, plus what the visitor's browser normally sends to an embedded iframe.\nSent when: only when a visitor opens a Video Popup that points at a YouTube URL.\nService URL: https:\/\/www.youtube.com\nTerms of Service: https:\/\/www.youtube.com\/t\/terms\nPrivacy Policy: https:\/\/policies.google.com\/privacy<\/p>\n\n<p><strong>Vimeo \u2014 Video Popup block (only when a visitor plays a Vimeo video)<\/strong>\nWhen a Video Popup block points to a Vimeo URL, the video is loaded from <code>https:\/\/player.vimeo.com\/<\/code> with the \"do not track\" (<code>dnt=1<\/code>) flag set \u2014 but <strong>only when the visitor clicks Play<\/strong>, never on page load.\nData sent: the video ID the site owner entered, plus what the visitor's browser normally sends to an embedded iframe.\nSent when: only when a visitor opens a Video Popup that points at a Vimeo URL. A self-hosted video file, or a popup no visitor opens, contacts no external service.\nService URL: https:\/\/vimeo.com\nTerms of Service: https:\/\/vimeo.com\/terms\nPrivacy Policy: https:\/\/vimeo.com\/privacy<\/p>\n\n<p><strong>Author-supplied Lottie animation URLs \u2014 Lottie block (only when the site owner uses a remote URL)<\/strong>\nIf a site owner enters a Lottie animation URL from any host (for example <code>https:\/\/lottie.host\/<\/code>), the visitor's browser fetches that <code>.json<\/code> or <code>.lottie<\/code> file directly from that host to render the animation. Uploading a <code>.json<\/code> or <code>.lottie<\/code> file to the site's Media Library instead avoids any third-party request.\nData sent: nothing beyond the URL request itself and normal browser headers.\nSent when: only when a page contains a Lottie block configured with a remote URL, and only for that URL. Local uploads contact no external service.\nService URL: whichever host the site owner chose (e.g. https:\/\/lottie.host)\nTerms of Service and Privacy Policy: those of the chosen host.<\/p>\n\n<p><strong>Social share destinations \u2014 Social Share block (only when a visitor clicks a share button)<\/strong>\nThe Social Share block renders a row of buttons as <strong>plain outbound links<\/strong> to each network's public share URL. Nothing is sent unless a visitor clicks one \u2014 the block does not embed any third-party content or make any request on page load. Which networks appear is controlled by the site owner.\nData sent: the URL and title of the page being shared, in the destination network's public share URL scheme.\nSent when: only when a visitor clicks the corresponding button, in their own browser, opening the network's share dialog in a new tab.\nNetworks and their share endpoints:\n* Facebook \u2014 https:\/\/www.facebook.com\/sharer\/sharer.php \u2014 https:\/\/www.facebook.com\/terms.php \u2014 https:\/\/www.facebook.com\/privacy\/policy\/\n* X (Twitter) \u2014 https:\/\/twitter.com\/intent\/tweet \u2014 https:\/\/x.com\/en\/tos \u2014 https:\/\/x.com\/en\/privacy\n* LinkedIn \u2014 https:\/\/www.linkedin.com\/sharing\/share-offsite\/ \u2014 https:\/\/www.linkedin.com\/legal\/user-agreement \u2014 https:\/\/www.linkedin.com\/legal\/privacy-policy\n* Pinterest \u2014 https:\/\/pinterest.com\/pin\/create\/button\/ \u2014 https:\/\/policy.pinterest.com\/en\/terms-of-service \u2014 https:\/\/policy.pinterest.com\/en\/privacy-policy\n* Reddit \u2014 https:\/\/www.reddit.com\/submit \u2014 https:\/\/www.redditinc.com\/policies\/user-agreement \u2014 https:\/\/www.reddit.com\/policies\/privacy-policy\n* WhatsApp \u2014 https:\/\/api.whatsapp.com\/send \u2014 https:\/\/www.whatsapp.com\/legal\/terms-of-service \u2014 https:\/\/www.whatsapp.com\/legal\/privacy-policy\n* Telegram \u2014 https:\/\/t.me\/share\/url \u2014 https:\/\/telegram.org\/tos \u2014 https:\/\/telegram.org\/privacy<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/etu-blocks\/<\/code>, or install via <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Activate Etu Blocks through the <strong>Plugins<\/strong> screen.<\/li>\n<li>Add any Etu block from the inserter \u2014 look for the <strong>Etu Blocks<\/strong> category.<\/li>\n<li>Open the <strong>Etu Blocks<\/strong> menu item in wp-admin to enable\/disable individual blocks or check usage.<\/li>\n<\/ol>\n\n<p>No configuration is required to get started.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"%E2%99%BF%20are%20the%20blocks%20really%20accessible%2C%20or%20is%20that%20a%20marketing%20line%3F\"><h3>\u267f Are the blocks really accessible, or is that a marketing line?<\/h3><\/dt>\n<dd><p>Really. Every interactive block is built to a documented ARIA recipe from the start \u2014 real dialog semantics, real range inputs, real ARIA state bound to the Interactivity store so what you see cannot drift from what a screen reader hears. Accessibility is a merge gate: a block that doesn't meet WCAG 2.2 AA and its pattern's keyboard behaviour does not ship.<\/p><\/dd>\n<dt id=\"%F0%9F%93%8F%20which%20wcag%20version%20do%20you%20target%3F\"><h3>\ud83d\udccf Which WCAG version do you target?<\/h3><\/dt>\n<dd><p>WCAG 2.2 Level AA \u2014 the version cited by EN 301 549 (European Accessibility Act) as it converges on 2.2, and a superset of the WCAG 2.1 AA cited by ADA Title II rules.<\/p><\/dd>\n<dt id=\"%E2%9A%A1%20is%20it%20fast%3F%20what%20is%20it%20built%20on%3F\"><h3>\u26a1 Is it fast? What is it built on?<\/h3><\/dt>\n<dd><p>Built the modern WordPress way, on official core APIs: the <strong>Interactivity API<\/strong> for front-end behaviour, the <strong>Block API v3<\/strong> (<code>block.json<\/code>), and <strong>server-side rendering<\/strong>. So there is no jQuery and no extra framework runtime on your visitors' pages, and each block's script module loads only where it is actually used. Every block is rendered on the server and only <em>enhanced<\/em> by a small view module, so the content works even before that script loads \u2014 or if it never does.<\/p><\/dd>\n<dt id=\"%F0%9F%8E%A8%20does%20it%20work%20with%20my%20theme%3F\"><h3>\ud83c\udfa8 Does it work with my theme?<\/h3><\/dt>\n<dd><p>Yes. Blocks inherit your theme's colours, spacing, and typography via <code>theme.json<\/code> \/ global styles before adding their own controls. Block themes and classic themes are both supported.<\/p><\/dd>\n<dt id=\"%F0%9F%94%92%20does%20etu%20blocks%20send%20my%20data%20anywhere%3F\"><h3>\ud83d\udd12 Does Etu Blocks send my data anywhere?<\/h3><\/dt>\n<dd><p>No. The plugin itself sends nothing from your server. The only third-party requests come from the Video Popup and Google Map blocks \u2014 and only in a visitor's browser, and only when they click Load. See the <strong>External Services<\/strong> section below for the full list.<\/p><\/dd>\n<dt id=\"%F0%9F%8E%AF%20why%20unregister%20a%20block%20when%20i%20disable%20it%2C%20instead%20of%20just%20hiding%20it%3F\"><h3>\ud83c\udfaf Why unregister a block when I disable it, instead of just hiding it?<\/h3><\/dt>\n<dd><p>So the choice is deliberate. If a disabled block still rendered on pages that use it, you could ship a page relying on a block that \"isn't installed\" and not realise. Unregistering makes the impact visible: any existing usage shows the standard \"block not found\" placeholder, and the Dashboard shows the usage count next to the toggle <em>before<\/em> you flip it \u2014 so you can see who's affected first.<\/p><\/dd>\n<dt id=\"%F0%9F%9B%92%20do%20any%20of%20the%20blocks%20need%20woocommerce%20or%20another%20plugin%3F\"><h3>\ud83d\uded2 Do any of the blocks need WooCommerce or another plugin?<\/h3><\/dt>\n<dd><p>No. All 29 blocks work on a stock WordPress install with no other plugins required.<\/p><\/dd>\n<dt id=\"%F0%9F%A7%A9%20is%20there%20a%20pro%20version%3F\"><h3>\ud83e\udde9 Is there a Pro version?<\/h3><\/dt>\n<dd><p>An Etu Blocks Pro add-on is planned but not yet released \u2014 it would add premium blocks (subscribe form, feeds, WooCommerce components, template kits) on top of what's here, never move existing features behind a paywall. This free plugin is fully functional on its own.<\/p><\/dd>\n<dt id=\"%E2%99%BB%EF%B8%8F%20what%20happens%20if%20i%20uninstall%20etu%20blocks%3F\"><h3>\u267b\ufe0f What happens if I uninstall Etu Blocks?<\/h3><\/dt>\n<dd><p>The plugin removes its own options (the disabled-blocks list, the usage-count cache) on uninstall. Your posts, pages, and media are never touched. Existing content that used Etu blocks will show the standard \"block not found\" placeholder until the plugin is re-activated.<\/p><\/dd>\n<dt id=\"%F0%9F%92%AC%20get%20support\"><h3>\ud83d\udcac Get Support<\/h3><\/dt>\n<dd><p>Post in the <a href=\"https:\/\/wordpress.org\/support\/plugin\/etu-blocks\/\">WordPress.org support forum<\/a>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<p>Initial release. 29 accessible blocks, powered by the WordPress Interactivity API.<\/p>\n\n<p><strong>Framework &amp; dashboard<\/strong><\/p>\n\n<ul>\n<li>New: Schema-driven Inspector \u2014 every block declares one PHP schema that drives its controls, its attributes, and the CSS it generates. One source, no drift.<\/li>\n<li>New: Live CSS preview in the editor \u2014 the same generator that renders on the front end also renders as you edit.<\/li>\n<li>New: Responsive controls \u2014 every length control can be split per device (desktop \/ tablet \/ mobile).<\/li>\n<li>New: SaaS-style dashboard \u2014 search, filter by type, enable\/disable per block with usage counts, light\/dark theme toggle, support banner.<\/li>\n<li>New: Full internationalization \u2014 every user-facing string translatable via the standard <code>__()<\/code> \/ <code>_x()<\/code> \/ <code>_n()<\/code> calls; <code>.pot<\/code> shipped in <code>languages\/<\/code>.<\/li>\n<li>New: REST endpoint <code>etu\/v1\/posts<\/code> \u2014 powers the Post Filter block's live filtering, with strict parameter clamping (post type must be public, per-page \u2264 24, taxonomies must belong to the post type, slugs sanitised). Only ever exposes published posts of public post types.<\/li>\n<li>New: Privacy-first facades for Google Maps and Video Popup \u2014 no third-party request until the visitor opts in.<\/li>\n<\/ul>","raw_excerpt":"A modern block library \u2014 29 blocks built on the WordPress Interactivity API and WCAG 2.2 AA, with a SaaS-style dashboard. All free.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/371633","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=371633"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/rayetun"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=371633"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=371633"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=371633"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=371633"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=371633"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=371633"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}