Code Explainers
Code explainers tagged #accessibility
typescript
import { useEffect, useState } from "react"; interface Section { id: string;
Building a scroll-spy hook in React
custom-hooks
intersectionobserver
dom-observation
Intermediate
8 steps
typescript
import { Directive, Input, HostBinding, HostListener } from '@angular/core'; import { NG_VALIDATORS, Validator, AbstractControl, ValidationErrors } from '@angular/forms'; @Directive({
A custom range validator directive in Angular
form-validation
directives
accessibility
Intermediate
8 steps
typescript
import { useCallback, useId, useRef, useState, type KeyboardEvent } from 'react'; interface Tab { id: string;
Building an accessible tabs component in React
accessibility
aria
keyboard-navigation
Intermediate
8 steps
javascript
import { useState } from 'react'; function TreeNode({ node, depth = 0 }) { const [expanded, setExpanded] = useState(depth === 0);
How a recursive file tree renders in React
recursion
component-composition
local-state
Intermediate
8 steps
javascript
class Carousel { constructor(root, { interval = 5000 } = {}) { this.root = root; this.track = root.querySelector('.carousel__track');
Building an accessible auto-playing carousel
dom
state-management
timers
Intermediate
9 steps
javascript
import { useState, useEffect, useRef, useCallback } from 'react'; export default function Carousel({ images }) { const [index, setIndex] = useState(0);
Building a wrap-around Carousel in React
hooks
usecallback
event-listeners
Intermediate
9 steps
javascript
const progressBar = document.getElementById('reading-progress'); const article = document.querySelector('article'); function updateProgress() {
Building a scroll-driven reading progress bar
dom
scroll-events
throttling
Intermediate
9 steps
javascript
import { useState } from 'react'; function StarRating({ value = 0, max = 5, onChange, size = 24 }) { const [hovered, setHovered] = useState(null);
Building an accessible star rating in React
controlled-component
accessibility
state-management
Intermediate
8 steps
typescript
import { Component, HostBinding, Input } from '@angular/core'; type ProgressVariant = 'success' | 'warning' | 'danger';
A CSS-driven progress ring in Angular
host-bindings
css-custom-properties
input-setters
Intermediate
8 steps
typescript
import { Component } from '@angular/core'; import { RouterLink, RouterLinkActive } from '@angular/router'; import { NgFor } from '@angular/common';
Building an active-route navbar in Angular
routing
standalone-components
accessibility
Intermediate
6 steps
javascript
const FOCUSABLE = [ 'a[href]', 'button:not([disabled])', 'input:not([disabled])',
How to trap keyboard focus in a dialog
accessibility
dom
event-handling
Intermediate
8 steps
javascript
function initCharacterCounter(textarea, options = {}) { const maxLength = options.maxLength ?? 280; const warnThreshold = options.warnThreshold ?? 0.9;
A live character counter for textareas
dom
closures
accessibility
Intermediate
7 steps
javascript
const zxcvbn = require('zxcvbn'); const STRENGTH_LABELS = ['Very weak', 'Weak', 'Fair', 'Strong', 'Very strong']; const STRENGTH_COLORS = ['#d64545', '#e0803c', '#d9c94c', '#5aa84f', '#2f8f3a'];
Building a live password strength meter
debounce
closures
dom-events
Intermediate
8 steps
typescript
type RGB = { r: number; g: number; b: number }; type WCAGLevel = "AA" | "AAA"; type TextSize = "normal" | "large";
Checking WCAG color contrast in TypeScript
accessibility
color-math
type-safety
Intermediate
10 steps
javascript
import { useEffect, useRef } from "react"; import { useLocation } from "react-router-dom"; export function RouteFocus({ title, children }) {
Managing focus on route change in React
accessibility
focus-management
routing
Intermediate
6 steps
javascript
const STORAGE_KEY = "theme-preference"; function getSystemTheme() { return window.matchMedia("(prefers-color-scheme: dark)").matches
Building a dark-mode toggle that respects the OS
dark-mode
localstorage
matchmedia
Intermediate
8 steps
javascript
import { useState, useRef, useCallback } from "react"; export function MultiSelect({ options, value, onChange, placeholder = "Select…" }) { const [open, setOpen] = useState(false);
Building a keyboard-accessible MultiSelect in React
controlled-component
accessibility
keyboard-navigation
Intermediate
10 steps
javascript
class StarRating { constructor(container, { max = 5, value = 0, onChange } = {}) { this.container = container; this.max = max;
Building an accessible star-rating widget
dom
event-handling
accessibility
Intermediate
7 steps