{"id":350977,"date":"2026-08-27T21:21:50","date_gmt":"2026-08-27T21:21:50","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ableblocks-accessible-blocks-accessibility-checker\/"},"modified":"2026-08-27T21:21:31","modified_gmt":"2026-08-27T21:21:31","slug":"rayetun-accessible-blocks","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/rayetun-accessible-blocks\/","author":23382822,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1","requires":"6.7","requires_php":"7.4","requires_plugins":null,"header_name":"Rayetun Accessible Blocks & Accessibility Toolkit","header_author":"Md Rayhan Uddin","header_description":"Accessible-by-default blocks plus an accessibility toolkit: editor checks, a site-wide scan, a front-end inspector, and reports.","assets_banners_color":"7b53c2","last_updated":"2026-08-27 21:21:31","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/wise.com\/pay\/me\/mdrayhanu2","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/rayetun-accessible-blocks\/","header_author_uri":"https:\/\/rayetun.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":39,"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-08-27 21:21:31","revision":3669530}},"upgrade_notice":{"1.0.0":"<p>First public release of Rayetun Accessible Blocks.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3669530,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3669530,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3669530,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3669530,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3669530,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250},"banner.svg":{"filename":"banner.svg","revision":3669530,"resolution":false,"location":"assets","locale":false}},"assets_blueprints":{},"all_blocks":{"ableblocks\/product-card":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ableblocks\/product-card","version":"1.0.0","title":"Product Card","category":"ableblocks","icon":"products","description":"An accessible product card: image, title, price, and a link \u2014 in three presets. The title is a real heading, the price change is spelled out, and each button names its product. Built to WCAG 2.2 AA.","keywords":["product","card","shop","price","store"],"textdomain":"rayetun-accessible-blocks","attributes":{"imageId":{"type":"number"},"imageUrl":{"type":"string","default":""},"imageAlt":{"type":"string","default":""},"title":{"type":"string","default":""},"titleLevel":{"type":"number","default":3},"url":{"type":"string","default":""},"price":{"type":"string","default":""},"originalPrice":{"type":"string","default":""},"description":{"type":"string","default":""},"buttonText":{"type":"string","default":""},"buttonSize":{"type":"string","default":"medium"},"badge":{"type":"string","default":""},"rating":{"type":"number","default":0},"preset":{"type":"string","default":"standard"}},"supports":{"html":false,"anchor":true,"align":["wide"],"color":{"background":true,"text":true,"button":true},"spacing":{"margin":true,"padding":true},"typography":{"fontSize":true}},"example":{"attributes":{"title":"Wireless headphones","price":"$129","originalPrice":"$159","rating":4,"buttonText":"View product","preset":"standard"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/render.php"},"ableblocks\/video-popup":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ableblocks\/video-popup","version":"1.0.0","title":"Video Popup","category":"ableblocks","icon":"video-alt3","description":"An accessible video lightbox: a poster opens the video in a native dialog. The player is loaded only when opened \u2014 no third-party requests, tracking, or autoplay until the visitor asks. Built to WCAG 2.2 AA.","keywords":["video","popup","lightbox","youtube","vimeo"],"textdomain":"rayetun-accessible-blocks","attributes":{"videoUrl":{"type":"string","default":""},"videoTitle":{"type":"string","default":""},"posterId":{"type":"number"},"posterUrl":{"type":"string","default":""},"triggerText":{"type":"string","default":""},"aspectRatio":{"type":"string","default":"16:9"},"posterTint":{"type":"number","default":0},"playStyle":{"type":"string","default":"dark"},"playSize":{"type":"string","default":"medium"},"autoplay":{"type":"boolean","default":true},"captions":{"type":"boolean","default":true},"showCloseButton":{"type":"boolean","default":true},"closeOnBackdrop":{"type":"boolean","default":true}},"supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"],"color":{"background":true,"text":true,"button":true},"spacing":{"margin":true,"padding":true},"typography":{"fontSize":true}},"example":{"attributes":{"videoTitle":"Product tour","triggerText":"Watch the tour"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"ableblocks\/data-table":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ableblocks\/data-table","version":"1.0.0","title":"Data Table","category":"ableblocks","icon":"editor-table","description":"An accessible, optionally sortable data table \u2014 real headers with scope, a caption, sort changes announced to screen readers, and a focusable responsive scroll region. Built to WCAG 2.2 AA.","keywords":["table","data","sortable","grid","accessible"],"textdomain":"rayetun-accessible-blocks","attributes":{"caption":{"type":"string","default":""},"columns":{"type":"array","default":["Column 1","Column 2","Column 3"]},"rows":{"type":"array","default":[["","",""],["","",""]]},"sortable":{"type":"boolean","default":true},"rowHeaders":{"type":"boolean","default":false}},"supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"],"color":{"background":true,"text":true},"spacing":{"margin":true,"padding":true},"typography":{"fontSize":true}},"example":{},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"ableblocks\/product-carousel":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ableblocks\/product-carousel","version":"1.0.0","title":"Products","category":"ableblocks","icon":"grid-view","description":"A row of Product Cards as an accessible grid or carousel. Grid wraps to rows; carousel is a real scroll region (keyboard-scrollable, nothing hidden) with prev\/next and dot pagination. Built to WCAG 2.2 AA.","keywords":["product","grid","carousel","shop","row"],"textdomain":"rayetun-accessible-blocks","attributes":{"layout":{"type":"string","default":"grid"},"perViewDesktop":{"type":"number","default":3},"perViewTablet":{"type":"number","default":2},"perViewMobile":{"type":"number","default":1},"gap":{"type":"number","default":24},"label":{"type":"string","default":""},"navPosition":{"type":"string","default":"bottom"},"navSize":{"type":"string","default":"small"},"showArrows":{"type":"boolean","default":true},"showDots":{"type":"boolean","default":true},"showScrollbar":{"type":"boolean","default":false},"autoplay":{"type":"boolean","default":false},"autoplaySeconds":{"type":"number","default":5}},"supports":{"html":false,"anchor":true,"align":["wide","full"],"interactivity":true,"spacing":{"margin":true,"padding":true}},"example":{},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"ableblocks\/modal":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ableblocks\/modal","version":"1.0.0","title":"Modal","category":"ableblocks","icon":"editor-expand","description":"An accessible modal dialog: focus handled natively, Escape closes, focus returns to the trigger. Built to WCAG 2.2 AA.","keywords":["modal","popup","dialog","lightbox","accessible"],"textdomain":"rayetun-accessible-blocks","attributes":{"triggerText":{"type":"string","default":""},"dialogTitle":{"type":"string","default":""},"showCloseButton":{"type":"boolean","default":true},"closeOnBackdrop":{"type":"boolean","default":true}},"supports":{"html":false,"anchor":true,"interactivity":true,"color":{"background":true,"text":true,"button":true},"spacing":{"margin":true,"padding":true},"typography":{"fontSize":true}},"example":{"attributes":{"triggerText":"Open dialog","dialogTitle":"Join the newsletter"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"ableblocks\/before-after":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ableblocks\/before-after","version":"1.0.0","title":"Before \/ After","category":"ableblocks","icon":"image-flip-horizontal","description":"An accessible before-and-after image comparison. Drag the handle, or use the keyboard \u2014 it's a real range slider, not a mouse-only widget. Both images are described for screen readers. Built to WCAG 2.2 AA.","keywords":["before","after","comparison","slider","reveal"],"textdomain":"rayetun-accessible-blocks","attributes":{"beforeId":{"type":"number"},"beforeUrl":{"type":"string","default":""},"beforeAlt":{"type":"string","default":""},"afterId":{"type":"number"},"afterUrl":{"type":"string","default":""},"afterAlt":{"type":"string","default":""},"beforeLabel":{"type":"string","default":"Before"},"afterLabel":{"type":"string","default":"After"},"showLabels":{"type":"boolean","default":true},"orientation":{"type":"string","default":"horizontal"},"startPosition":{"type":"number","default":50},"sliderLabel":{"type":"string","default":""}},"supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"],"spacing":{"margin":true,"padding":true}},"example":{},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"ableblocks\/image-hotspot":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ableblocks\/image-hotspot","version":"1.0.0","title":"Image Hotspot","category":"ableblocks","icon":"location","description":"Pin accessible hotspots on an image. Each pin is a real keyboard-operable button that opens a titled tooltip, and every hotspot is also listed as readable text \u2014 so the information never depends on a mouse or on seeing the image.","keywords":["hotspot","image map","pin","tooltip","interactive","accessible"],"textdomain":"rayetun-accessible-blocks","attributes":{"imageId":{"type":"number"},"imageUrl":{"type":"string","default":""},"imageAlt":{"type":"string","default":""},"imageWidth":{"type":"number"},"imageHeight":{"type":"number"},"globalTrigger":{"type":"string","default":"click"},"globalTheme":{"type":"string","default":"light"},"tooltipWidth":{"type":"number","default":280},"showList":{"type":"boolean","default":true},"listHeading":{"type":"string","default":""},"hotspots":{"type":"array","default":[],"items":{"type":"object"}}},"supports":{"anchor":true,"html":false,"align":["wide","full"],"interactivity":true,"spacing":{"margin":true,"padding":true}},"example":{"attributes":{"imageUrl":"","showList":true,"hotspots":[{"id":"hs-a","x":32,"y":40,"title":"Noise-cancelling mics","description":"A six-mic array tuned for calls."},{"id":"hs-b","x":68,"y":62,"title":"40-hour battery","description":"Two weeks of everyday listening."}]}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"ableblocks\/testimonials":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ableblocks\/testimonials","version":"1.0.0","title":"Testimonials","category":"ableblocks","icon":"testimonial","description":"A group of Testimonial items as an accessible grid or carousel \u2014 choose how many show per view, with prev\/next and dot pagination. A real scroll region, not a rotator. Built to WCAG 2.2 AA.","keywords":["testimonials","reviews","grid","carousel","quotes"],"textdomain":"rayetun-accessible-blocks","attributes":{"layout":{"type":"string","default":"grid"},"perViewDesktop":{"type":"number","default":3},"perViewTablet":{"type":"number","default":2},"perViewMobile":{"type":"number","default":1},"gap":{"type":"number","default":24},"label":{"type":"string","default":""},"navPosition":{"type":"string","default":"bottom"},"navSize":{"type":"string","default":"small"},"showArrows":{"type":"boolean","default":true},"showDots":{"type":"boolean","default":true},"showScrollbar":{"type":"boolean","default":false},"autoplay":{"type":"boolean","default":false},"autoplaySeconds":{"type":"number","default":5}},"supports":{"html":false,"anchor":true,"align":["wide","full"],"interactivity":true,"spacing":{"margin":true,"padding":true}},"example":{},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"ableblocks\/testimonial":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ableblocks\/testimonial","version":"1.0.0","title":"Testimonial","category":"ableblocks","icon":"format-quote","description":"An accessible testimonial or review, with three presets. Built on a semantic figure\/blockquote\/figcaption, with the star rating exposed to screen readers as text. Built to WCAG 2.2 AA.","keywords":["testimonial","review","quote","rating","feedback"],"textdomain":"rayetun-accessible-blocks","attributes":{"quote":{"type":"string","default":""},"authorName":{"type":"string","default":""},"authorRole":{"type":"string","default":""},"avatarId":{"type":"number"},"avatarUrl":{"type":"string","default":""},"rating":{"type":"number","default":0},"date":{"type":"string","default":""},"preset":{"type":"string","default":"card"},"accentColor":{"type":"string","default":""}},"supports":{"html":false,"anchor":true,"align":["wide"],"color":{"background":true,"text":true},"spacing":{"margin":true,"padding":true},"typography":{"fontSize":true,"fontFamily":true}},"example":{"attributes":{"quote":"This made our whole site usable for everyone on the team.","authorName":"Jordan Lee","authorRole":"Product Manager","rating":5,"preset":"card"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/render.php"},"ableblocks\/pricing-table":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ableblocks\/pricing-table","version":"1.0.0","title":"Pricing Table","category":"ableblocks","icon":"money-alt","description":"An accessible pricing table with a real monthly\/annual toggle, the price change announced to screen readers, and the recommended plan marked with text \u2014 not color alone. Built to WCAG 2.2 AA.","keywords":["pricing","plans","price","table","accessible"],"textdomain":"rayetun-accessible-blocks","attributes":{"ariaLabel":{"type":"string","default":"Pricing"},"monthlyLabel":{"type":"string","default":"Monthly"},"annualLabel":{"type":"string","default":"Annual"},"defaultBilling":{"type":"string","default":"monthly","enum":["monthly","annual"]}},"supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"],"color":{"background":true,"text":true},"spacing":{"margin":true,"padding":true,"blockGap":true},"typography":{"fontSize":true}},"example":{},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"ableblocks\/slider":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ableblocks\/slider","version":"1.0.0","title":"Slider","category":"ableblocks","icon":"slides","description":"An accessible carousel of slides that can hold any blocks. Choose how many show per view on desktop, tablet, and mobile; keyboard-scrollable, with a pause button and reduced-motion respected. Built to WCAG 2.2 AA.","keywords":["slider","carousel","slideshow","gallery","accessible"],"textdomain":"rayetun-accessible-blocks","attributes":{"layout":{"type":"string","default":"carousel"},"perViewDesktop":{"type":"number","default":1},"perViewTablet":{"type":"number","default":1},"perViewMobile":{"type":"number","default":1},"gap":{"type":"number","default":16},"label":{"type":"string","default":""},"navPosition":{"type":"string","default":"bottom"},"navSize":{"type":"string","default":"medium"},"showArrows":{"type":"boolean","default":true},"showDots":{"type":"boolean","default":true},"showScrollbar":{"type":"boolean","default":false},"autoplay":{"type":"boolean","default":false},"autoplaySeconds":{"type":"number","default":5}},"supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"],"spacing":{"margin":true,"padding":true}},"example":{},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"ableblocks\/query-grid":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ableblocks\/query-grid","version":"1.0.0","title":"Query Grid","category":"ableblocks","icon":"grid-view","description":"A post grid with accessible filter controls: real labelled buttons, result counts announced to screen readers, and a semantic list. Built to WCAG 2.2 AA.","keywords":["query","posts","grid","filter","accessible"],"textdomain":"rayetun-accessible-blocks","attributes":{"postType":{"type":"string","default":"post"},"numberOfItems":{"type":"number","default":9},"columns":{"type":"number","default":3},"filterTaxonomy":{"type":"string","default":"category"},"showFilters":{"type":"boolean","default":true},"showFeaturedImage":{"type":"boolean","default":true},"showDate":{"type":"boolean","default":true},"showExcerpt":{"type":"boolean","default":true},"excerptWords":{"type":"number","default":24},"showAuthor":{"type":"boolean","default":false},"showCategoryBadge":{"type":"boolean","default":false},"cardStyle":{"type":"string","default":"boxed","enum":["boxed","plain"]},"imageRatio":{"type":"string","default":"landscape","enum":["landscape","square","portrait","auto"]},"hoverEffect":{"type":"boolean","default":true},"focalPoint":{"type":"object","default":{"x":0.5,"y":0.5}},"titleLevel":{"type":"number","default":3},"imageFallback":{"type":"string","default":"placeholder","enum":["placeholder","none"]},"fallbackImageId":{"type":"number","default":0},"fallbackImageUrl":{"type":"string","default":""},"gridId":{"type":"number"},"filterMode":{"type":"string","default":"instant"},"facetTaxonomies":{"type":"array","default":[],"items":{"type":"string"}},"enableSearch":{"type":"boolean","default":false}},"supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"],"color":{"background":true,"text":true,"link":true},"spacing":{"margin":true,"padding":true},"typography":{"fontSize":true}},"example":{},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"ableblocks\/table-of-contents":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ableblocks\/table-of-contents","version":"1.0.0","title":"Table of Contents","category":"ableblocks","icon":"list-view","description":"A table of contents built from your headings \u2014 a real navigation landmark, with the current section marked and focus moved to it on click. Headings get anchors automatically. Built to WCAG 2.2 AA.","keywords":["toc","contents","outline","navigation","anchor"],"textdomain":"rayetun-accessible-blocks","attributes":{"title":{"type":"string","default":"On this page"},"minLevel":{"type":"number","default":2},"maxLevel":{"type":"number","default":6},"preset":{"type":"string","default":"card"},"marker":{"type":"string","default":"none"},"accentColor":{"type":"string","default":""},"collapsible":{"type":"boolean","default":false},"sticky":{"type":"boolean","default":false}},"supports":{"html":false,"anchor":true,"color":{"text":true,"background":true,"link":true},"spacing":{"margin":true,"padding":true},"typography":{"fontSize":true}},"example":{"attributes":{"title":"On this page","preset":"card"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"ableblocks\/countdown":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ableblocks\/countdown","version":"1.0.0","title":"Countdown","category":"ableblocks","icon":"clock","description":"An accessible countdown timer to a date and time. The ticking digits are hidden from screen readers (so they aren't announced every second); a text alternative gives the real deadline. Built to WCAG 2.2 AA.","keywords":["countdown","timer","clock","sale","launch"],"textdomain":"rayetun-accessible-blocks","attributes":{"targetDate":{"type":"string","default":""},"preset":{"type":"string","default":"cards"},"size":{"type":"string","default":"medium"},"accentColor":{"type":"string","default":""},"heading":{"type":"string","default":""},"showDays":{"type":"boolean","default":true},"showHours":{"type":"boolean","default":true},"showMinutes":{"type":"boolean","default":true},"showSeconds":{"type":"boolean","default":true},"labelDays":{"type":"string","default":""},"labelHours":{"type":"string","default":""},"labelMinutes":{"type":"string","default":""},"labelSeconds":{"type":"string","default":""},"expiryAction":{"type":"string","default":"message"},"expiryMessage":{"type":"string","default":""}},"supports":{"html":false,"anchor":true,"interactivity":true,"align":["wide","full"],"color":{"background":true,"text":true},"spacing":{"margin":true,"padding":true},"typography":{"fontSize":true,"fontFamily":true}},"example":{"attributes":{"targetDate":"2035-01-01T09:00:00","heading":"Launching in","preset":"cards"}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"ableblocks\/slide":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ableblocks\/slide","version":"1.0.0","title":"Slide","category":"ableblocks","icon":"images-alt2","description":"A single slide inside an AbleBlocks Slider.","keywords":["slide","carousel","slider"],"textdomain":"rayetun-accessible-blocks","parent":["ableblocks\/slider"],"supports":{"html":false,"reusable":false},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css"},"ableblocks\/pricing-plan":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ableblocks\/pricing-plan","version":"1.0.0","title":"Pricing Plan","category":"ableblocks","icon":"money-alt","description":"A single plan inside an AbleBlocks Pricing Table.","keywords":["pricing","plan","price"],"textdomain":"rayetun-accessible-blocks","parent":["ableblocks\/pricing-table"],"attributes":{"name":{"type":"string","default":""},"priceMonthly":{"type":"string","default":""},"priceAnnual":{"type":"string","default":""},"ctaLabel":{"type":"string","default":""},"ctaUrl":{"type":"string","default":""},"ctaNewTab":{"type":"boolean","default":false},"featured":{"type":"boolean","default":false},"badgeText":{"type":"string","default":"Most popular"}},"supports":{"html":false,"reusable":false,"spacing":{"padding":true},"typography":{"fontSize":true}},"example":{},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","render":"file:.\/render.php"},"ableblocks\/mega-section":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ableblocks\/mega-section","title":"Mega Menu Section","category":"design","parent":["ableblocks\/mega-menu"],"icon":"list-view","description":"One category in a mega menu's rail, with the pane of content it reveals.","textdomain":"rayetun-accessible-blocks","attributes":{"label":{"type":"string","default":""},"description":{"type":"string","default":""},"badgeText":{"type":"string","default":""},"iconUrl":{"type":"string","default":""},"iconId":{"type":"number"}},"supports":{"html":false,"reusable":false,"inserter":false,"spacing":{"blockGap":true}},"example":{},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","render":"file:.\/render.php"},"ableblocks\/mega-menu":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ableblocks\/mega-menu","title":"Mega Menu","category":"design","parent":["core\/navigation"],"icon":"menu-alt","description":"A navigation item with a panel that holds real content \u2014 columns, images, headings, any block. Opens as an accessible disclosure, not a fake ARIA menu.","keywords":["mega","menu","navigation","dropdown","flyout"],"textdomain":"rayetun-accessible-blocks","attributes":{"layout":{"type":"string","default":"panel"},"railTitle":{"type":"string","default":""},"label":{"type":"string","default":""},"url":{"type":"string","default":""},"opensInNewTab":{"type":"boolean","default":false},"description":{"type":"string","default":""},"badgeText":{"type":"string","default":""},"panelWidth":{"type":"string","default":"content"},"panelAlign":{"type":"string","default":"start"},"panelMaxWidth":{"type":"number","default":0},"openAnimation":{"type":"string","default":"fade"},"trigger":{"type":"string","default":"inherit"},"showIcon":{"type":"boolean","default":true}},"usesContext":["openSubmenusOnClick","showSubmenuIcon","textColor","customTextColor","fontSize","customFontSize","style"],"supports":{"html":false,"reusable":false,"interactivity":true,"color":{"background":true,"text":true,"gradients":true,"__experimentalDefaultControls":{"background":true}},"spacing":{"padding":true,"blockGap":true,"__experimentalDefaultControls":{"padding":true}},"border":{"color":true,"radius":true,"style":true,"width":true},"shadow":true},"selectors":{"root":".ableblocks-mega-menu","color":{"text":".ableblocks-mega-menu__panel","background":".ableblocks-mega-menu__panel"},"spacing":{"padding":".ableblocks-mega-menu__panel","blockGap":".ableblocks-mega-menu__panel"},"border":".ableblocks-mega-menu__panel","shadow":".ableblocks-mega-menu__panel"},"example":{},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"}},"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3669530,"resolution":"1","location":"assets","locale":"","width":1726,"height":1297},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3669530,"resolution":"2","location":"assets","locale":"","width":1615,"height":847},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3669530,"resolution":"3","location":"assets","locale":"","width":1620,"height":862},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3669530,"resolution":"4","location":"assets","locale":"","width":1700,"height":838},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3669530,"resolution":"5","location":"assets","locale":"","width":1700,"height":872},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3669530,"resolution":"6","location":"assets","locale":"","width":1802,"height":824},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3669530,"resolution":"7","location":"assets","locale":"","width":1700,"height":791},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3669530,"resolution":"8","location":"assets","locale":"","width":1460,"height":726}},"screenshots":{"1":"Accessibility dashboard \u2014 site-wide totals, severity breakdown, and the worst-first page list.","2":"In-editor accessibility panel \u2014 live checks on a block as you build, with an all-clear state.","3":"Front-end inspector \u2014 accessibility issues outlined in place on the live page, with an explanation popover.","4":"Per-page findings \u2014 every finding with its rule, severity, and offending markup.","5":"Email reports \u2014 schedule a weekly or monthly summary of your stored scan.","6":"Post Grid \u2014 grid view","7":"Countdown \u2014 An accessible countdown timer to a date and time (Cards, Solid, Minimal view)","8":"Image Before \/ After \u2014 An accessible before-and-after image comparison."}},"plugin_section":[],"plugin_tags":[1953,252248,209467,148857,1956],"plugin_category":[34],"plugin_contributors":[263109],"plugin_business_model":[],"class_list":["post-350977","plugin","type-plugin","status-publish","hentry","plugin_tags-accessibility","plugin_tags-accessibility-audit","plugin_tags-accessibility-checker","plugin_tags-block-editor","plugin_tags-wcag","plugin_category-accessibility","plugin_contributors-rayetun","plugin_committers-rayetun"],"banners":{"banner":"https:\/\/ps.w.org\/rayetun-accessible-blocks\/assets\/banner-772x250.png?rev=3669530","banner_2x":"https:\/\/ps.w.org\/rayetun-accessible-blocks\/assets\/banner-1544x500.png?rev=3669530","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/rayetun-accessible-blocks\/assets\/icon.svg?rev=3669530","icon":"https:\/\/ps.w.org\/rayetun-accessible-blocks\/assets\/icon.svg?rev=3669530","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/rayetun-accessible-blocks\/assets\/screenshot-1.png?rev=3669530","caption":"Accessibility dashboard \u2014 site-wide totals, severity breakdown, and the worst-first page list."},{"src":"https:\/\/ps.w.org\/rayetun-accessible-blocks\/assets\/screenshot-2.png?rev=3669530","caption":"In-editor accessibility panel \u2014 live checks on a block as you build, with an all-clear state."},{"src":"https:\/\/ps.w.org\/rayetun-accessible-blocks\/assets\/screenshot-3.png?rev=3669530","caption":"Front-end inspector \u2014 accessibility issues outlined in place on the live page, with an explanation popover."},{"src":"https:\/\/ps.w.org\/rayetun-accessible-blocks\/assets\/screenshot-4.png?rev=3669530","caption":"Per-page findings \u2014 every finding with its rule, severity, and offending markup."},{"src":"https:\/\/ps.w.org\/rayetun-accessible-blocks\/assets\/screenshot-5.png?rev=3669530","caption":"Email reports \u2014 schedule a weekly or monthly summary of your stored scan."},{"src":"https:\/\/ps.w.org\/rayetun-accessible-blocks\/assets\/screenshot-6.png?rev=3669530","caption":"Post Grid \u2014 grid view"},{"src":"https:\/\/ps.w.org\/rayetun-accessible-blocks\/assets\/screenshot-7.png?rev=3669530","caption":"Countdown \u2014 An accessible countdown timer to a date and time (Cards, Solid, Minimal view)"},{"src":"https:\/\/ps.w.org\/rayetun-accessible-blocks\/assets\/screenshot-8.png?rev=3669530","caption":"Image Before \/ After \u2014 An accessible before-and-after image comparison."}],"raw_content":"<!--section=description-->\n<p>Rayetun Accessible Blocks combines two things in one plugin: accessible blocks, and a toolkit for checking and improving the accessibility of your whole site.<\/p>\n\n<p><strong>Accessible blocks.<\/strong> Interactive components \u2014 modals, sliders, tables, mega menus, carousels, before\/after, and more \u2014 built to be keyboard-operable and screen-reader-correct against <strong>WCAG 2.2 Level AA<\/strong>, each with a published Accessibility Conformance Report you can hand to a compliance team.<\/p>\n\n<p><strong>An accessibility toolkit.<\/strong> An <strong>accessibility panel in the editor<\/strong> as you write, a <strong>site-wide axe-core scan<\/strong> with a dashboard and trend history, a <strong>front-end inspector<\/strong> that outlines problems on the live page, an <strong>image alt-text audit and bulk editor<\/strong>, <strong>readability<\/strong> and <strong>contrast<\/strong> help, scheduled <strong>email summaries<\/strong>, and an exportable <strong>accessibility report<\/strong>.<\/p>\n\n<p>Every feature described here is included in the plugin \u2014 there are no locked panels or upgrade prompts. A separate add-on aimed at agencies (managing many client sites from one place, branded client reports, and the like) may follow later; it would only add to what is already here.<\/p>\n\n<h4>How Rayetun Accessible Blocks is organised<\/h4>\n\n<ul>\n<li><strong>Accessible by default<\/strong> \u2014 WCAG 2.2 AA is the definition of done, not a setting you switch on<\/li>\n<li><strong>Local first<\/strong> \u2014 scan results, findings, and settings live in your own database; nothing is sent anywhere<\/li>\n<li><strong>Built on core APIs<\/strong> \u2014 the WordPress Interactivity API, Block API v3 (<code>block.json<\/code>), and server-side rendering. No jQuery, no framework runtime; each block's script loads only where it's used<\/li>\n<li><strong>Honest by design<\/strong> \u2014 it fixes markup, it never masks problems with an overlay, and it makes no compliance claim on your behalf<\/li>\n<\/ul>\n\n\n\n<h4>\ud83e\uddf1 The Blocks<\/h4>\n\n<ul>\n<li>\ud83e\ude9f <strong>Modal<\/strong> \u2014 built on the native <code>&lt;dialog&gt;<\/code> element: focus handled correctly, Escape always closes, focus returns to the trigger, background made inert. No focus-trap hacks.<\/li>\n<li>\ud83c\udfa0 <strong>Slider<\/strong> (with Slide) \u2014 an accessible carousel where each slide holds <em>any<\/em> blocks. Choose how many slides show per view on desktop, tablet, and mobile; add a slide with one button. It's a genuine keyboard-scrollable region (nothing hidden from screen readers), with real prev\/next and dot controls, arrows below or on the sides, and opt-in auto-advance that ships a real pause button and never runs under reduced motion.<\/li>\n<li>\ud83d\udcca <strong>Data Table<\/strong> \u2014 a real, optionally sortable table with a caption, proper column and row header scopes, sort changes announced to screen readers, and a focusable scroll region for narrow screens.<\/li>\n<li>\ud83d\udcb3 <strong>Pricing Table<\/strong> (with Pricing Plan) \u2014 plans with a real monthly\/annual toggle (a keyboard-operable radio group, not a fake switch), the price change announced to screen readers, and the recommended plan marked with a text badge \u2014 never colour alone.<\/li>\n<li>\ud83d\uddc2\ufe0f <strong>Query Grid<\/strong> \u2014 a post grid with accessible filters: real labelled filter buttons (not clickable spans), the result count announced to screen readers, and a semantic list. Adds front-end post filtering, done accessibly.<\/li>\n<li>\ud83e\udded <strong>Mega Menu<\/strong> (with Mega Menu Section) \u2014 a mega menu that goes <em>inside<\/em> core's Navigation block rather than replacing it. Two layouts: a single disclosure panel, or a category rail built as a real ARIA Tabs widget with arrow-key navigation. Deliberately <strong>not<\/strong> <code>role=\"menu\"<\/code> \u2014 that role promises application-menu keyboard behaviour a panel of links can't honour.<\/li>\n<li>\ud83c\udfac <strong>Video Popup<\/strong> \u2014 a video lightbox in a native <code>&lt;dialog&gt;<\/code>: the player loads <strong>only when the visitor opens it<\/strong> \u2014 no third-party requests, cookies, or autoplay on page load \u2014 and closing actually stops playback. Focus is moved in and returned. YouTube (via the no-cookie domain), Vimeo, or a self-hosted file.<\/li>\n<li>\u23f3 <strong>Countdown<\/strong> \u2014 a countdown timer with three presets (Cards, Solid, Minimal). 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 text alternative gives the real deadline and the end is announced once. Counts to the same instant for everyone (resolved in your site's timezone).<\/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. It's built on a real range slider, so arrow keys move the divider, dragging works, and a screen reader announces the position \u2014 and both images are described, so a blind user gets the comparison too. Horizontal or vertical.<\/li>\n<li>\ud83d\udccd <strong>Image Hotspot<\/strong> \u2014 pin clickable spots on an image, each opening a titled tooltip with optional text, an image (with an accessible lightbox), and a link. Every pin is a real <strong>keyboard-operable button<\/strong> (Escape closes and returns you to the pin), and \u2014 optional, on by default \u2014 every hotspot is <em>also<\/em> listed as plain text below the image, so the information never depends on a mouse or on seeing the picture. Markers clear the 24px target-size minimum; the optional pulse never runs under reduced motion.<\/li>\n<li>\ud83e\udded <strong>Table of Contents<\/strong> \u2014 built automatically from your headings, as a real navigation landmark. Three styles (Card, Bordered, Plain) with an accent colour, bullet\/number markers, an optional collapse toggle, and a sticky option. Headings get anchors on their own, the current section is marked as you scroll, and clicking a link <strong>moves focus into that section<\/strong> \u2014 so keyboard users land where they meant to, not back at the list.<\/li>\n<li>\ud83d\udcac <strong>Testimonial<\/strong> \u2014 a testimonial or review in three presets (Card, Review, Quote). Built on a real <code>&lt;figure&gt;<\/code>\/<code>&lt;blockquote&gt;<\/code>\/<code>&lt;figcaption&gt;<\/code>, with the star rating exposed to screen readers as <strong>\"Rated 5 out of 5\"<\/strong> rather than five unlabelled symbols.<\/li>\n<li>\ud83d\udde3\ufe0f <strong>Testimonials<\/strong> \u2014 lay out Testimonial items as a grid or carousel: choose how many show per view, with prev\/next, dot pagination, and arrows below or on the sides.<\/li>\n<li>\ud83d\udecd\ufe0f <strong>Product Card<\/strong> \u2014 a product card in three presets (Standard, Horizontal, Overlay). The title is a real heading, the image has proper alt text, a sale is announced as \"Original price \u2026 Sale price \u2026\", and each button's name includes its product so identical \"View product\" links stay distinct. Author-populated \u2014 no WooCommerce needed.<\/li>\n<li>\ud83c\udfa0 <strong>Products<\/strong> \u2014 lay out Product Cards as a <strong>grid<\/strong> or a <strong>carousel<\/strong>. Grid wraps into rows (choose how many per view, per breakpoint). Carousel is a genuine scroll region \u2014 labelled, keyboard-scrollable, nothing hidden \u2014 with prev\/next buttons, dot pagination, and arrows below or on the sides.<\/li>\n<\/ul>\n\n<p>Both carousels respect <code>prefers-reduced-motion<\/code>, and every dot and arrow meets the WCAG 2.2 24\u00d724px target-size minimum.<\/p>\n\n\n\n<h4>\ud83c\udf9b\ufe0f Works on Every Block<\/h4>\n\n<p>These apply to <em>any<\/em> block \u2014 ours or WordPress's own.<\/p>\n\n<p><strong>\ud83d\udc41\ufe0f Conditional Display<\/strong>\nShow or hide any block by login state or user role. Hidden blocks are removed <strong>on the server<\/strong>, so screen readers, search engines, and feeds all see the same page a visitor does \u2014 not content hidden with CSS that assistive tech still reads out.<\/p>\n\n<p><em>A note on Conditional Display:<\/em> it controls <strong>presentation, not access<\/strong>. Hidden text still exists in the post, so it can surface in site search or an export. It's stronger than CSS-hiding and weaker than a membership plugin \u2014 please don't use it to protect genuinely private content.<\/p>\n\n<p><strong>\u2728 Motion<\/strong>\nEntrance animations, parallax, and sticky positioning on any block. Every effect is skipped entirely for visitors who ask their system for reduced motion, and the code loads only on pages that actually use it.<\/p>\n\n\n\n<h4>\ud83d\udd0d In-Editor Accessibility Checker<\/h4>\n\n<p>Every block this plugin adds gets an \"Accessibility\" panel that checks its setup <strong>as you build<\/strong>, and shows a clear all-clear when it's right.<\/p>\n\n<ul>\n<li><strong>Flags what only the block author can fix<\/strong> \u2014 a dialog that only the Escape key can close, a table with no caption, a slide with no content, auto-advance set too fast, a control colour pairing below the contrast minimum<\/li>\n<li><strong>Reading-level readout<\/strong> \u2014 an advisory Flesch\u2013Kincaid estimate over your prose (WCAG 3.1.5). Advisory only: it never gates or fails anything<\/li>\n<li><strong>Stays in its lane<\/strong> \u2014 interactive configuration, so it complements full-content checkers like Block Accessibility Checks rather than duplicating them<\/li>\n<\/ul>\n\n\n\n<h4>\ud83d\udcca Site-Wide Accessibility Scan<\/h4>\n\n<p>An <strong>Accessibility<\/strong> screen in wp-admin scans your published pages with <strong>axe-core<\/strong> against WCAG 2.2 AA and keeps the results.<\/p>\n\n<ul>\n<li><strong>Site-wide totals<\/strong> \u2014 errors, warnings, and dismissed findings, with a severity breakdown<\/li>\n<li><strong>Worst-first page list<\/strong> \u2014 see which pages need attention, with per-finding detail and the offending markup<\/li>\n<li><strong>Dismissed-issues log<\/strong> \u2014 dismiss a finding with a written reason; it's kept with a timestamp, never silently dropped<\/li>\n<li><strong>Admin status column<\/strong> \u2014 accessibility status next to each page in your post list<\/li>\n<li><strong>Uncapped counts<\/strong> \u2014 totals are computed across the whole site, never a capped page, so nothing is quietly under-reported<\/li>\n<\/ul>\n\n\n\n<h4>\ud83d\udd8d\ufe0f Front-End Inspector<\/h4>\n\n<p>The same checks, on the <strong>live rendered page<\/strong> \u2014 for logged-in editors only.<\/p>\n\n<ul>\n<li><strong>In-context outlines<\/strong> \u2014 each flagged element is boxed where it actually sits, with a popover explaining the problem<\/li>\n<li><strong>Contrast fix suggestions<\/strong> \u2014 for a colour-contrast failure, it computes the nearest passing colour (nudged toward black or white, whichever changes it least) and offers it with a swatch. A suggestion, never an automatic change<\/li>\n<li><strong>Never shown to visitors<\/strong> \u2014 gated on a real capability check in PHP, not just hidden with CSS<\/li>\n<\/ul>\n\n<p>This is the opposite of an accessibility overlay. It changes nothing a visitor sees; it shows problems to the person who can fix them.<\/p>\n\n\n\n<h4>\ud83d\udce7 Scheduled Email Reports<\/h4>\n\n<p>Have a summary of your accessibility findings emailed to you <strong>weekly or monthly<\/strong>. Off by default; you choose the address.<\/p>\n\n<p>The email reports your <strong>last stored scan<\/strong> \u2014 it does not run a new one, because a real scan needs a real browser to render your pages. The email says so itself, and the settings screen tells you when the last scan actually ran.<\/p>\n\n\n\n<h4>\ud83d\udccb Accessibility Conformance Reports<\/h4>\n\n<p>Each block ships a published ACR documenting how it meets each relevant WCAG 2.2 AA success criterion, the testing environment, and any known limitations \u2014 including defects found and fixed during screen-reader testing.<\/p>\n\n<p>Each block has been tested with a real screen reader (NVDA + Firefox), and its report records the testing environment along with any defects found and fixed during that testing.<\/p>\n\n\n\n<h4>\ud83e\udded What Rayetun Accessible Blocks Will Not Do<\/h4>\n\n<p>Worth stating plainly, so you know what to expect:<\/p>\n\n<ul>\n<li>\u274c <strong>No overlay or accessibility widget<\/strong> \u2014 no floating toolbar, no \"profiles\" for blindness or dyslexia. Rayetun Accessible Blocks fixes the underlying markup rather than layering a widget over it<\/li>\n<li>\u274c <strong>No compliance claim<\/strong> \u2014 no plugin can make a site ADA or EAA compliant, and Rayetun Accessible Blocks does not claim to<\/li>\n<li>\u274c <strong>No auto-fix of your content<\/strong> \u2014 the inspector suggests; you decide. Silent rewrites hide problems instead of solving them<\/li>\n<li>\u274c <strong>No data collection<\/strong> \u2014 no telemetry, no phone-home, no account<\/li>\n<\/ul>\n\n<p><strong>Automated checks are a floor, not a certificate.<\/strong> They catch a portion of WCAG failures; the rest needs a keyboard and a screen reader. A clean scan does not mean a page is accessible, and Rayetun Accessible Blocks says that on the dashboard itself.<\/p>\n\n\n\n<h4>Compatible With<\/h4>\n\n<ul>\n<li>Block themes and classic themes \u2014 blocks inherit your theme's colours, spacing, and typography via theme.json\/global styles<\/li>\n<li>WordPress core Navigation block (Mega Menu inserts inside it)<\/li>\n<li>Block Accessibility Checks and other full-content checkers \u2014 complementary, not overlapping<\/li>\n<li>Any standard block editor workflow \u2014 no page builder required<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>Rayetun Accessible Blocks itself sends no data anywhere. Scan results, findings, and settings are stored only in your own WordPress database. There is no telemetry, no account, and no phone-home.<\/p>\n\n<p>One block can embed third-party video \u2014 and only then, and only for a visitor who chooses to watch:<\/p>\n\n<p><strong>YouTube \/ Vimeo \u2014 Video Popup block (only when a visitor plays a video)<\/strong>\nWhen you set a YouTube or Vimeo URL on a Video Popup block, the player is requested from that provider <strong>only when a visitor opens the popup<\/strong>, never on page load. At that point the visitor's browser contacts YouTube (through the privacy-friendly youtube-nocookie.com domain) or Vimeo (with Do Not Track requested) to stream the video.\nData sent: the visitor's IP address and their playback interactions, sent by their own browser to the provider.\nSent when: only when a visitor opens a Video Popup that points at a YouTube or Vimeo URL. A self-hosted video file, or a popup no visitor opens, contacts no external service.\nService URL: https:\/\/www.youtube.com \u2014 https:\/\/vimeo.com\nTerms of Service: https:\/\/www.youtube.com\/t\/terms \u2014 https:\/\/vimeo.com\/terms\nPrivacy Policy: https:\/\/policies.google.com\/privacy \u2014 https:\/\/vimeo.com\/privacy<\/p>\n\n<p><strong>Video thumbnail import (optional, editor-initiated)<\/strong>\nIf you use the Video Popup block's optional <strong>\"Use video thumbnail\"<\/strong> button in the editor, your site fetches the poster image from the provider once, server-side, and saves it to your Media Library. The poster is then served from your own site, so visitors' browsers do not contact the provider on page load. This request happens only when you click that button.<\/p>\n\n<h3>Development<\/h3>\n\n<p>Rayetun Accessible Blocks is open source and built with the official <a href=\"https:\/\/www.npmjs.com\/package\/@wordpress\/scripts\">@wordpress\/scripts<\/a> toolchain (webpack). The complete, unminified source \u2014 every block, the editor checks, and the dashboard \u2014 ships in the plugin's <code>src\/<\/code> directory; the files in <code>build\/<\/code> are compiled from it. Nothing is obfuscated.<\/p>\n\n<p>To build from source:<\/p>\n\n<pre><code>npm install &amp;&amp; npm run build\n<\/code><\/pre>\n\n<p>That regenerates everything in <code>build\/<\/code>. <code>npm test<\/code> runs the unit suite. No build step is needed to <em>use<\/em> the plugin \u2014 the compiled output is included.<\/p>\n\n<h3>Credits<\/h3>\n\n<p>Rayetun Accessible Blocks bundles <a href=\"https:\/\/github.com\/dequelabs\/axe-core\">axe-core<\/a> by Deque Systems, Inc., which powers the accessibility scan. axe-core is licensed under the Mozilla Public License 2.0 (MPL-2.0); its copyright and license notice are preserved in <code>build\/axe.min.js<\/code>. Everything else is original work under GPL-2.0-or-later.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/rayetun-accessible-blocks\/<\/code>, or install via <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Activate Rayetun Accessible Blocks through the <strong>Plugins<\/strong> screen.<\/li>\n<li>Add any of the plugin's blocks from the inserter \u2014 look for the <strong>Rayetun Accessible Blocks<\/strong> category.<\/li>\n<li>Open the <strong>Accessibility<\/strong> panel in the block sidebar to see live checks as you build.<\/li>\n<li>Visit <strong>Accessibility<\/strong> in the admin menu and run a site-wide scan.<\/li>\n<li>Optional: turn on <strong>Email reports<\/strong> to get a weekly or monthly summary.<\/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%20does%20this%20plugin%20make%20my%20site%20ada%20%2F%20eaa%20compliant%3F\"><h3>\u267f Does this plugin make my site ADA \/ EAA compliant?<\/h3><\/dt>\n<dd><p>No plugin can, and you should be sceptical of any that claims it does. Most of WCAG conformance comes from your content and design decisions \u2014 alt text, contrast choices, heading structure, plain language. Rayetun Accessible Blocks handles the part a plugin <em>can<\/em> own: correct markup, keyboard operability, focus management, and accessible defaults for the interactive components on your pages.<\/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=\"%F0%9F%9A%AB%20is%20this%20an%20accessibility%20overlay%20or%20widget%3F\"><h3>\ud83d\udeab Is this an accessibility overlay or widget?<\/h3><\/dt>\n<dd><p>No. An overlay adds a floating toolbar that changes what visitors see while leaving the underlying markup unchanged. Rayetun Accessible Blocks works on the markup itself, and its front-end inspector is visible only to logged-in editors \u2014 never to visitors.<\/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 theme.json\/global styles before adding their own controls. Block themes and classic themes are both supported.<\/p><\/dd>\n<dt id=\"%F0%9F%96%A5%EF%B8%8F%20why%20do%20scans%20run%20in%20my%20browser%20instead%20of%20on%20the%20server%3F\"><h3>\ud83d\udda5\ufe0f Why do scans run in my browser instead of on the server?<\/h3><\/dt>\n<dd><p>Because a meaningful accessibility check needs a real rendered page \u2014 computed colours, actual layout, focus order. That only exists in a browser. It's why the scheduled email reports your last stored scan rather than running a new one, and why the email says so.<\/p><\/dd>\n<dt id=\"%F0%9F%94%92%20does%20rayetun%20accessible%20blocks%20send%20my%20data%20anywhere%3F\"><h3>\ud83d\udd12 Does Rayetun Accessible Blocks send my data anywhere?<\/h3><\/dt>\n<dd><p>No. Scan results, findings, dismissals, and settings are stored in your own WordPress database. There is no telemetry and no account. The only outbound requests come from the Video Popup block when a visitor chooses to play an embedded YouTube or Vimeo video \u2014 see the External Services section.<\/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's no jQuery and no extra framework runtime on your visitors' pages, and each block's script loads only where it's actually used (the Motion and inspector assets, too). And because every block is rendered on the server and only <em>enhanced<\/em> by a little JavaScript, the content works even before that script loads \u2014 or if it never does. That's good for speed, and it's the same reason the blocks hold up for screen readers and search engines.<\/p><\/dd>\n<dt id=\"%F0%9F%9B%92%20do%20the%20product%20blocks%20need%20woocommerce%3F\"><h3>\ud83d\uded2 Do the Product blocks need WooCommerce?<\/h3><\/dt>\n<dd><p>No. Product Card and Products are author-populated, so they work on any site with no e-commerce plugin installed.<\/p><\/dd>\n<dt id=\"%F0%9F%A7%A9%20does%20it%20conflict%20with%20other%20accessibility%20checkers%3F\"><h3>\ud83e\udde9 Does it conflict with other accessibility checkers?<\/h3><\/dt>\n<dd><p>No. The in-editor panel checks interactive block <em>configuration<\/em> \u2014 the pitfalls only a block author can fix. Full-content checkers like Block Accessibility Checks cover different ground, and the two complement each other.<\/p><\/dd>\n<dt id=\"%E2%99%BB%EF%B8%8F%20what%20happens%20if%20i%20uninstall%20rayetun%20accessible%20blocks%3F\"><h3>\u267b\ufe0f What happens if I uninstall Rayetun Accessible Blocks?<\/h3><\/dt>\n<dd><p>Everything is removed cleanly: the scan table, its schema option, per-post scan meta, and all plugin settings. Your posts, pages, and media are never touched. If you generated an accessibility statement page, that page is your own content and is left in place.<\/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\/rayetun-accessible-blocks\/\">WordPress.org support forum<\/a>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>New: Image Hotspot block \u2014 pin accessible spots on an image. Each pin is a real keyboard-operable button with a titled tooltip (Escape closes and returns focus to the pin), and every hotspot is also rendered as a plain text list, so nothing depends on a mouse or on seeing the image. Markers meet the 24px target-size minimum; the pulse animation respects reduced motion.<\/li>\n<li>New: Starter patterns \u2014 ready-made showcase layouts built from the blocks (an image carousel, a testimonials carousel, a wide three-plan pricing table, a countdown promo banner, a filterable post grid, a navigation bar with a mega menu, and a map with location hotspots), in their own \"Rayetun Accessible Blocks\" category in the inserter's Patterns tab. Drop one in already filled, then edit. Each is a finished layout \u2014 handy as a starting point, and as a template for your own.<\/li>\n<li>New: Blocks tab (dashboard) \u2014 turn any of the plugin's blocks on or off in the inserter, so you can ship only the blocks you use. \"Off\" is the safe kind: the block stays registered, so pages already using it keep rendering \u2014 it just won't appear in the inserter. Each block shows how many pages already use it before you switch it off.<\/li>\n<li>Improved: Slider \u2014 reworked onto the shared collection engine. Each slide now holds any blocks; pick how many slides show per view on desktop, tablet, and mobile; add a slide with one button. It's now a keyboard-scrollable region (nothing hidden), with prev\/next, dot pagination, and arrows below or on the sides, matching the Products and Testimonials carousels.<\/li>\n<li>New: Accessibility report export \u2014 a printable HTML report (overview, findings by WCAG criterion, per-page breakdown) and a CSV of the findings, from the dashboard. It states plainly that it is a coverage report, not a conformance claim.<\/li>\n<li>New: Conditional Display can now schedule a block between two dates (show from \/ show until), in the site timezone \u2014 evaluated on the server like every other visibility rule.<\/li>\n<li>New: More Motion entrance presets \u2014 diagonal fades (up-left, up-right, down-left, down-right) and zoom out, all skipped under prefers-reduced-motion.<\/li>\n<li>New: Table of Contents block \u2014 auto-built from your headings as a navigation landmark, with automatic anchors, an active-section marker, and focus moved into the section on click.<\/li>\n<li>New: Before \/ After block \u2014 an accessible image-comparison slider. Keyboard-operable (it's a real range input, not a mouse-only handle), draggable, and both images are described for screen readers. Horizontal or vertical.<\/li>\n<li>New: Alt-text audit &amp; bulk editor (dashboard) \u2014 every image missing alt text on one screen, so you can write the descriptions in bulk. You type every one; nothing is guessed.<\/li>\n<li>New: Inspector \u2014 Focus order and Structure views. See the page's keyboard tab order numbered in place, and a heading\/landmark outline that flags skipped levels and a missing main, for logged-in editors.<\/li>\n<li>New: Scheduled email summary \u2014 have the results of your last stored scan emailed weekly or monthly. Off by default; the email states plainly that it reports the stored scan rather than running a new one.<\/li>\n<li>New: Contrast fix suggestions \u2014 for a colour-contrast failure, the front-end inspector suggests the nearest passing colour. A suggestion, never an automatic change.<\/li>\n<li>New: Testimonials container \u2014 lay out Testimonial items as a grid or carousel (per-view counts, dot pagination, side\/below arrows), on the same accessible engine as Products.<\/li>\n<li>New: Products (formerly Product Carousel) \u2014 grid or carousel layout for Product Cards, with items-per-view (no partial cards), dot pagination and arrow-position controls.<\/li>\n<li>New: Product Card block \u2014 an accessible product card with three presets (Standard, Horizontal, Overlay). Real heading title, image alt text, sale prices spelled out for screen readers, product-named buttons, and a contrast-safe overlay. Author-populated (no WooCommerce required).<\/li>\n<li>New: Testimonial block \u2014 an accessible testimonial\/review with three presets (Card, Review, Quote). Semantic figure\/blockquote\/figcaption; the star rating is announced as \"Rated N out of 5\"; the avatar is decorative.<\/li>\n<li>New: Countdown block \u2014 an accessible countdown with three presets (Cards, Solid, Minimal). The per-second digits are hidden from screen readers; a text alternative states the deadline and the end is announced once. Resolves the target in the site timezone so everyone counts to the same instant.<\/li>\n<li>New: Video Popup block \u2014 an accessible video lightbox on a native dialog; the player is lazy-loaded on open (no third-party requests, cookies, or autoplay until the visitor watches) and playback stops on close. Focus handled and returned; YouTube (no-cookie), Vimeo, or self-hosted.<\/li>\n<li>New: Mega Menu block (with Mega Menu Section) \u2014 a mega menu that inserts inside core's Navigation block, in a single-panel disclosure or a category-rail Tabs layout. No menu roles; keyboard and screen-reader verified with NVDA.<\/li>\n<li>New: Site-wide accessibility scan \u2014 an axe-core scan of your published pages with stored results, a worst-first page list, per-finding detail, an admin status column, and a dismissed-issues log with reasons and timestamps.<\/li>\n<li>New: Front-end accessibility inspector \u2014 for logged-in editors, a launcher that outlines accessibility issues on the live page, in place. Never shown to visitors.<\/li>\n<li>New: Reading-level readout in the editor's Accessibility check \u2014 an advisory Flesch\u2013Kincaid estimate over your prose (WCAG 3.1.5); never a pass\/fail.<\/li>\n<li>New: Accessibility statement generator \u2014 produce a statement page from your own answers, with no pre-filled compliance claims.<\/li>\n<li>New: Site helpers \u2014 optional skip link, visible focus outline, and link underlines, each a real fix rather than a mask.<\/li>\n<li>New: Motion \u2014 entrance animations, parallax and sticky on any block; all skipped under prefers-reduced-motion, assets loaded only where used.<\/li>\n<li>New: Conditional Display \u2014 show\/hide any block by login state or user role, removed server-side so assistive tech and crawlers see the true page.<\/li>\n<li>New: Query Grid block \u2014 post grid with accessible filter buttons (aria-pressed), result counts announced to screen readers, and a semantic list.<\/li>\n<li>New: Pricing Table block (with Pricing Plan) \u2014 accessible monthly\/annual radio toggle, announced price switching, and recommended plan marked with a text badge.<\/li>\n<li>New: Data Table block \u2014 accessible sortable table with caption, header scopes, aria-sort announcements, row headers, and a focusable responsive scroll region.<\/li>\n<li>New: In-editor accessibility checker \u2014 an \"Accessibility\" panel on every block this plugin adds that flags interactive-setup issues as you build.<\/li>\n<li>New: Slider block (with Slide) \u2014 accessible carousel, keyboard + arrow-key controls, pause button, hover\/focus auto-pause, reduced-motion, live-region announcements.<\/li>\n<li>New: Modal block \u2014 native dialog semantics, Escape to close, focus return, backdrop dismiss (optional), reduced-motion support.<\/li>\n<li>Published Accessibility Conformance Reports for every block, with honest VERIFIED \/ PARTIALLY VERIFIED status.<\/li>\n<\/ul>","raw_excerpt":"Accessible-by-default blocks plus an accessibility toolkit: editor checks, a site-wide scan, a front-end inspector, and reports.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/350977","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=350977"}],"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=350977"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=350977"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=350977"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=350977"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=350977"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=350977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}