@equal-experts/kuat-react 0.13.0 → 0.14.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-docs/AGENTS.md +10 -0
- package/agent-docs/README.md +17 -0
- package/agent-docs/bundle-manifest.json +55 -0
- package/agent-docs/components/_template.md +21 -0
- package/agent-docs/components/button-group.md +27 -0
- package/agent-docs/components/button.md +50 -0
- package/agent-docs/components/components.manifest.json +23 -0
- package/agent-docs/components/kuat-header.md +27 -0
- package/agent-docs/external/kuat-agent-rules/reference/accessibility/README.md +7 -0
- package/agent-docs/external/kuat-agent-rules/reference/accessibility/accessibility.md +446 -0
- package/agent-docs/external/kuat-agent-rules/reference/brand/README.md +9 -0
- package/agent-docs/external/kuat-agent-rules/reference/brand/brand.md +109 -0
- package/agent-docs/external/kuat-agent-rules/reference/brand/logo.md +152 -0
- package/agent-docs/external/kuat-agent-rules/reference/brand/voice-and-tone.md +166 -0
- package/agent-docs/external/kuat-agent-rules/reference/content/README.md +12 -0
- package/agent-docs/external/kuat-agent-rules/reference/content/formatting.md +120 -0
- package/agent-docs/external/kuat-agent-rules/reference/content/numbers.md +87 -0
- package/agent-docs/external/kuat-agent-rules/reference/content/punctuation.md +94 -0
- package/agent-docs/external/kuat-agent-rules/reference/content/writing-style.md +96 -0
- package/agent-docs/external/kuat-agent-rules/reference/design-language/README.md +11 -0
- package/agent-docs/external/kuat-agent-rules/reference/design-language/borders.md +160 -0
- package/agent-docs/external/kuat-agent-rules/reference/design-language/colours.md +201 -0
- package/agent-docs/external/kuat-agent-rules/reference/design-language/design-language.md +117 -0
- package/agent-docs/external/kuat-agent-rules/reference/design-language/spacing.md +131 -0
- package/agent-docs/external/kuat-agent-rules/reference/design-language/tokens/README.md +29 -0
- package/agent-docs/external/kuat-agent-rules/reference/design-language/tokens/colors.tokens.json +84 -0
- package/agent-docs/external/kuat-agent-rules/reference/design-language/typography.md +156 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/README.md +10 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/content/README.md +26 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/content/blog-posts.md +29 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/content/marketing-content.md +61 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/content/seo.md +40 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/emails.md +68 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/patterns/README.md +7 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/patterns/marketing-pages.md +368 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/website.md +154 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/README.md +16 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/accessibility.md +392 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/component-decision-tree.md +248 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/component-registry.md +49 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/content/README.md +29 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/content/actions.md +45 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/content/confirmations.md +51 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/content/empty-states.md +37 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/content/errors.md +48 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/content/forms.md +68 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/content/product-content.md +128 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/design.md +177 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/emails.md +65 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/README.md +10 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/authentication.md +303 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/dashboards.md +313 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/documentation.md +333 -0
- package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/forms.md +361 -0
- package/agent-docs/kuat-docs/rules/README.md +155 -0
- package/agent-docs/kuat-docs/rules/design/layouts.md +394 -0
- package/agent-docs/kuat-docs/rules/scenarios/README.md +83 -0
- package/agent-docs/kuat-docs/rules/scenarios/authentication.md +301 -0
- package/agent-docs/kuat-docs/rules/scenarios/dashboards.md +314 -0
- package/agent-docs/kuat-docs/rules/scenarios/documentation.md +333 -0
- package/agent-docs/kuat-docs/rules/scenarios/forms.md +359 -0
- package/agent-docs/kuat-docs/rules/scenarios/marketing-pages.md +367 -0
- package/agent-docs/manifest.json +9 -0
- package/agent-docs/rules/LOADING-consumer.md +27 -0
- package/dist/accordion.d.ts +2 -0
- package/dist/alert-dialog.d.ts +2 -0
- package/dist/badge.d.ts +3 -0
- package/dist/button-group.d.ts +2 -0
- package/dist/button.d.ts +3 -0
- package/dist/carousel.d.ts +2 -0
- package/dist/checkbox.d.ts +3 -0
- package/dist/components/ui/accordion/accordion.d.ts +7 -0
- package/dist/components/ui/accordion/index.d.ts +1 -0
- package/dist/components/ui/alert-dialog/alert-dialog.d.ts +20 -0
- package/dist/components/ui/alert-dialog/index.d.ts +1 -0
- package/dist/components/ui/badge/badge.d.ts +16 -0
- package/dist/components/ui/badge/index.d.ts +2 -0
- package/dist/components/ui/breadcrumb/Breadcrumb.d.ts +29 -0
- package/dist/components/ui/breadcrumb/breadcrumb-primitives.d.ts +19 -0
- package/dist/components/ui/breadcrumb/index.d.ts +4 -0
- package/dist/components/ui/button/button.d.ts +27 -0
- package/dist/components/ui/button/index.d.ts +2 -0
- package/dist/components/ui/button-group/button-group.d.ts +23 -0
- package/dist/components/ui/button-group/index.d.ts +2 -0
- package/dist/components/ui/carousel/carousel.d.ts +50 -0
- package/dist/components/ui/carousel/index.d.ts +2 -0
- package/dist/components/ui/checkbox/checkbox-field.d.ts +23 -0
- package/dist/components/ui/checkbox/checkbox.d.ts +5 -0
- package/dist/components/ui/checkbox/index.d.ts +4 -0
- package/dist/components/ui/content-card/content-card.d.ts +29 -0
- package/dist/components/ui/content-card/index.d.ts +2 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts +27 -0
- package/dist/components/ui/dropdown-menu/index.d.ts +1 -0
- package/dist/components/ui/ee-logo-icon/ee-logo-icon.d.ts +11 -0
- package/dist/components/ui/ee-logo-icon/index.d.ts +2 -0
- package/dist/components/ui/field/field.d.ts +28 -0
- package/dist/components/ui/field/index.d.ts +2 -0
- package/dist/components/ui/icon-button/icon-button.d.ts +27 -0
- package/dist/components/ui/icon-button/index.d.ts +2 -0
- package/dist/components/ui/input/index.d.ts +2 -0
- package/dist/components/ui/input/input.d.ts +20 -0
- package/dist/components/ui/kuat-carousel/index.d.ts +2 -0
- package/dist/components/ui/kuat-carousel/kuat-carousel.d.ts +16 -0
- package/dist/components/ui/kuat-header/index.d.ts +4 -0
- package/dist/components/ui/kuat-header/kuat-header.d.ts +16 -0
- package/dist/components/ui/kuat-header/kuat-header.logic.d.ts +32 -0
- package/dist/components/ui/kuat-header/kuat-header.types.d.ts +91 -0
- package/dist/components/ui/kuat-logo-lockup/index.d.ts +2 -0
- package/dist/components/ui/kuat-logo-lockup/kuat-logo-lockup.d.ts +17 -0
- package/dist/components/ui/kuat-radial-progress/index.d.ts +2 -0
- package/dist/components/ui/kuat-radial-progress/kuat-radial-progress.d.ts +16 -0
- package/dist/components/ui/radio/index.d.ts +4 -0
- package/dist/components/ui/radio/radio-field.d.ts +25 -0
- package/dist/components/ui/radio/radio.d.ts +7 -0
- package/dist/components/ui/select/constants.d.ts +19 -0
- package/dist/components/ui/select/index.d.ts +3 -0
- package/dist/components/ui/select/select.d.ts +53 -0
- package/dist/components/ui/separator/index.d.ts +2 -0
- package/dist/components/ui/separator/separator.d.ts +9 -0
- package/dist/components/ui/sonner/index.d.ts +4 -0
- package/dist/components/ui/sonner/sonner-content.d.ts +15 -0
- package/dist/components/ui/sonner/sonner.d.ts +21 -0
- package/dist/components/ui/switch/index.d.ts +4 -0
- package/dist/components/ui/switch/switch-field.d.ts +23 -0
- package/dist/components/ui/switch/switch.d.ts +5 -0
- package/dist/components/ui/textarea/index.d.ts +2 -0
- package/dist/components/ui/textarea/textarea.d.ts +9 -0
- package/dist/components/ui/toggle/constants.d.ts +4 -0
- package/dist/components/ui/toggle/index.d.ts +6 -0
- package/dist/components/ui/toggle/toggle-group.d.ts +11 -0
- package/dist/components/ui/toggle/toggle.d.ts +9 -0
- package/dist/field.d.ts +3 -0
- package/dist/icon-button.d.ts +3 -0
- package/dist/index.d.ts +47 -0
- package/dist/input.d.ts +3 -0
- package/dist/kuat-carousel.d.ts +2 -0
- package/dist/kuat-radial-progress.d.ts +7 -0
- package/dist/lib/react-node-compat.d.ts +7 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/radio.d.ts +3 -0
- package/dist/select.d.ts +3 -0
- package/dist/sonner.d.ts +1 -0
- package/dist/style.css +1 -1
- package/dist/style.css.d.ts +2 -0
- package/dist/switch.d.ts +1 -0
- package/dist/test/setup.d.ts +1 -0
- package/dist/textarea.d.ts +3 -0
- package/dist/toggle-group.d.ts +3 -0
- package/dist/toggle.d.ts +3 -0
- package/package.json +4 -2
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Kuat — consumer agent entry
|
|
2
|
+
|
|
3
|
+
Rules for this install live under `agent-docs/` in `@equal-experts/kuat-core`, `@equal-experts/kuat-react`, and `@equal-experts/kuat-vue`.
|
|
4
|
+
|
|
5
|
+
1. Run `ensure-rules.sh` from kuat-agent-docs skills (symlinked) — expect `RULES_SOURCE=package` when cwd has node_modules.
|
|
6
|
+
2. Load `agent-docs/rules/LOADING-consumer.md`.
|
|
7
|
+
3. Load component guides via `agent-docs/components.manifest.json`.
|
|
8
|
+
4. Skills: `kuat-review`, `kuat-create` from [kuat-agent-docs](https://github.com/equalexperts/kuat-agent-docs).
|
|
9
|
+
|
|
10
|
+
**Version:** 0.14.0-beta.0 · **Rules snapshot:** 538afc80d437
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Kuat Consumer Agent Docs
|
|
2
|
+
|
|
3
|
+
Curated agent docs bundled with `@equal-experts/kuat-core`, `@equal-experts/kuat-react`, and `@equal-experts/kuat-vue`.
|
|
4
|
+
|
|
5
|
+
## Start here
|
|
6
|
+
|
|
7
|
+
- [AGENTS.md](./AGENTS.md)
|
|
8
|
+
- [rules/LOADING-consumer.md](./rules/LOADING-consumer.md)
|
|
9
|
+
- [components/components.manifest.json](./components/components.manifest.json)
|
|
10
|
+
|
|
11
|
+
## Regenerate
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
node scripts/agent-docs/bundle-for-core.mjs
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Built against upstream ref: `538afc80d437`
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"outputDir": "packages/kuat-core/agent-docs",
|
|
3
|
+
"include": [
|
|
4
|
+
{
|
|
5
|
+
"source": "kuat-docs/rules/README.md",
|
|
6
|
+
"target": "kuat-docs/rules/README.md"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"source": "kuat-docs/rules/design/layouts.md",
|
|
10
|
+
"target": "kuat-docs/rules/design/layouts.md"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"source": "kuat-docs/rules/scenarios",
|
|
14
|
+
"target": "kuat-docs/rules/scenarios"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"source": "kuat-docs/components",
|
|
18
|
+
"target": "components"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"source": "external/kuat-agent-rules/reference/brand",
|
|
22
|
+
"target": "external/kuat-agent-rules/reference/brand"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"source": "external/kuat-agent-rules/reference/accessibility",
|
|
26
|
+
"target": "external/kuat-agent-rules/reference/accessibility"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"source": "external/kuat-agent-rules/reference/design-language",
|
|
30
|
+
"target": "external/kuat-agent-rules/reference/design-language"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"source": "external/kuat-agent-rules/reference/content",
|
|
34
|
+
"target": "external/kuat-agent-rules/reference/content"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"source": "external/kuat-agent-rules/reference/media-types/web-product",
|
|
38
|
+
"target": "external/kuat-agent-rules/reference/media-types/web-product"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"source": "external/kuat-agent-rules/reference/media-types/web-marketing",
|
|
42
|
+
"target": "external/kuat-agent-rules/reference/media-types/web-marketing"
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
"denyPathSegments": [
|
|
46
|
+
".cursor",
|
|
47
|
+
"contribution-docs"
|
|
48
|
+
],
|
|
49
|
+
"denyFilenames": [
|
|
50
|
+
"CONTRIBUTING.md",
|
|
51
|
+
"AGENTS.md",
|
|
52
|
+
".cursorrules",
|
|
53
|
+
"PUBLISHING.md"
|
|
54
|
+
]
|
|
55
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# ButtonGroup (`kuat:button-group`)
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Groups related buttons with consistent spacing and optional text labels. Exported from `@equal-experts/kuat-react` / `@equal-experts/kuat-vue`.
|
|
6
|
+
|
|
7
|
+
## When to use
|
|
8
|
+
|
|
9
|
+
- Segmented controls, toolbar groups, related actions shown together
|
|
10
|
+
|
|
11
|
+
## When not to use
|
|
12
|
+
|
|
13
|
+
- Single primary action → `shadcn:button` alone
|
|
14
|
+
- Exclusive selection across many options → `RadioGroup` or tabs
|
|
15
|
+
|
|
16
|
+
## Accessibility
|
|
17
|
+
|
|
18
|
+
- Ensure each child button remains focusable
|
|
19
|
+
- Provide a group label when the set has a shared purpose (`aria-label` on group or visible legend)
|
|
20
|
+
|
|
21
|
+
## API
|
|
22
|
+
|
|
23
|
+
Import from `@equal-experts/kuat-react` (or vue). Compose with shadcn `Button` children. See Storybook for current props.
|
|
24
|
+
|
|
25
|
+
## Related components
|
|
26
|
+
|
|
27
|
+
- `shadcn:button`
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Button (`shadcn:button`)
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Primary action control for forms, dialogs, and toolbars. In Kuat apps, use the **shadcn Button** installed in your app (`@/components/ui/button`), themed by `@equal-experts/kuat-core` CSS variables.
|
|
6
|
+
|
|
7
|
+
## When to use
|
|
8
|
+
|
|
9
|
+
- Submitting forms, confirming dialogs, navigation CTAs
|
|
10
|
+
- One clear primary action per section (see upstream form scenarios)
|
|
11
|
+
|
|
12
|
+
## When not to use
|
|
13
|
+
|
|
14
|
+
- Navigation to another route → prefer `<Link>` styled as needed
|
|
15
|
+
- Toggle on/off state → `Switch` or `Toggle`
|
|
16
|
+
- Group of related exclusive options → `ButtonGroup` (`kuat:button-group`)
|
|
17
|
+
|
|
18
|
+
## Variants
|
|
19
|
+
|
|
20
|
+
| Variant | Use |
|
|
21
|
+
|---------|-----|
|
|
22
|
+
| `default` | Primary action |
|
|
23
|
+
| `destructive` | Irreversible or dangerous actions |
|
|
24
|
+
| `outline` / `ghost` | Secondary or cancel |
|
|
25
|
+
| `secondary` | Alternative emphasis |
|
|
26
|
+
| `link` | Inline text actions |
|
|
27
|
+
|
|
28
|
+
## States
|
|
29
|
+
|
|
30
|
+
- **Disabled:** use `disabled` or `aria-disabled` with visible reason; do not disable submit on forms (validate on submit per form scenario rules)
|
|
31
|
+
- **Loading:** show busy state; keep label or `aria-busy`
|
|
32
|
+
|
|
33
|
+
## Content guidance
|
|
34
|
+
|
|
35
|
+
See upstream `actions.md` for label copy. Verb-driven, 1–3 words, sentence case.
|
|
36
|
+
|
|
37
|
+
## Accessibility
|
|
38
|
+
|
|
39
|
+
- Native `<button>` or `asChild` with appropriate role
|
|
40
|
+
- Visible focus ring (`ring` tokens)
|
|
41
|
+
- Icon-only buttons require `aria-label`
|
|
42
|
+
|
|
43
|
+
## API
|
|
44
|
+
|
|
45
|
+
Install via `npx shadcn@latest add button`. Props follow shadcn/Radix: `variant`, `size`, `className`, `asChild`.
|
|
46
|
+
|
|
47
|
+
## Related components
|
|
48
|
+
|
|
49
|
+
- `kuat:button-group` — grouped actions
|
|
50
|
+
- Form scenarios — placement and validation timing
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"components": {
|
|
4
|
+
"shadcn:button": {
|
|
5
|
+
"slug": "button",
|
|
6
|
+
"displayName": "Button",
|
|
7
|
+
"path": "components/button.md",
|
|
8
|
+
"sources": ["shadcn:button", "@equal-experts/kuat-core"]
|
|
9
|
+
},
|
|
10
|
+
"kuat:button-group": {
|
|
11
|
+
"slug": "button-group",
|
|
12
|
+
"displayName": "ButtonGroup",
|
|
13
|
+
"path": "components/button-group.md",
|
|
14
|
+
"sources": ["@equal-experts/kuat-react", "@equal-experts/kuat-vue"]
|
|
15
|
+
},
|
|
16
|
+
"kuat:kuat-header": {
|
|
17
|
+
"slug": "kuat-header",
|
|
18
|
+
"displayName": "KuatHeader",
|
|
19
|
+
"path": "components/kuat-header.md",
|
|
20
|
+
"sources": ["@equal-experts/kuat-react", "@equal-experts/kuat-vue"]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# KuatHeader (`kuat:kuat-header`)
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Application header block with logo and navigation slots. Kuat block — use when you need the standard EE product chrome.
|
|
6
|
+
|
|
7
|
+
## When to use
|
|
8
|
+
|
|
9
|
+
- Product apps using dark horizontal navigation per product design rules
|
|
10
|
+
|
|
11
|
+
## When not to use
|
|
12
|
+
|
|
13
|
+
- Marketing pages → marketing layout rules
|
|
14
|
+
- Fully custom chrome → compose lower-level primitives
|
|
15
|
+
|
|
16
|
+
## Accessibility
|
|
17
|
+
|
|
18
|
+
- Landmark `header` with clear structure
|
|
19
|
+
- Logo has appropriate alt text; nav uses list semantics
|
|
20
|
+
|
|
21
|
+
## API
|
|
22
|
+
|
|
23
|
+
Import from `@equal-experts/kuat-react` / `kuat-vue`. See Storybook and package exports for slots and props.
|
|
24
|
+
|
|
25
|
+
## Related components
|
|
26
|
+
|
|
27
|
+
- Product [design.md](../rules/design.md) — navigation patterns
|
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
# Accessibility
|
|
2
|
+
|
|
3
|
+
Foundational accessibility requirements for Equal Experts content and products. These rules ensure products and services deliver the best experience for all users.
|
|
4
|
+
|
|
5
|
+
**Target: WCAG 2.2 Level AA compliance.**
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Quick reference
|
|
10
|
+
|
|
11
|
+
- **Standard:** WCAG 2.2 Level AA (legal baseline for many contexts).
|
|
12
|
+
- **Contrast:** Body text 4.5:1, large text/UI 3:1; never rely on colour alone for meaning.
|
|
13
|
+
- **Typography:** Min body 11pt (14px), line height 1.5; use relative units; support 200% zoom.
|
|
14
|
+
- **Motion:** Provide reduced-motion alternative; no auto-play without user control.
|
|
15
|
+
- **Images:** Meaningful images need alt text; decorative images need empty or role="presentation".
|
|
16
|
+
- **Links/buttons:** Descriptive labels; visible focus; keyboard operable.
|
|
17
|
+
- **Content:** Plain language; logical structure (headings, lists); person-first language.
|
|
18
|
+
- **Testing:** Use contrast checkers and automated a11y tools; test with keyboard and screen reader.
|
|
19
|
+
|
|
20
|
+
*Full detail follows.*
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Why Accessibility Matters
|
|
25
|
+
|
|
26
|
+
Accessibility is the practice of making information, activities, and environments sensible, meaningful, and usable for as many people as possible.
|
|
27
|
+
|
|
28
|
+
### The Case for Accessibility
|
|
29
|
+
|
|
30
|
+
- **16% of the global population** (1.3 billion people) live with a significant disability
|
|
31
|
+
- **Legal requirements** - UK Public Sector organisations must create accessible products, websites, and services
|
|
32
|
+
- **Better UX for everyone** - Accessible design benefits older people, non-native English speakers, those with temporary disabilities, and situational limitations (bright sunlight, noisy environments)
|
|
33
|
+
- **Extended reach** - Accessible content reaches more users and improves overall satisfaction
|
|
34
|
+
|
|
35
|
+
### Equal Experts Commitment
|
|
36
|
+
|
|
37
|
+
If we want clients to trust us on accessibility, we must lead by example. All content we produce—websites, documents, applications—should reflect our commitment to accessibility.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## WCAG Principles (POUR)
|
|
42
|
+
|
|
43
|
+
The Web Content Accessibility Guidelines are built on four principles:
|
|
44
|
+
|
|
45
|
+
| Principle | Description |
|
|
46
|
+
|-----------|-------------|
|
|
47
|
+
| **Perceivable** | Information must be presented in ways users can perceive using their senses |
|
|
48
|
+
| **Operable** | All users must be able to interact with interface components |
|
|
49
|
+
| **Understandable** | Users must be able to understand information and how to operate the UI |
|
|
50
|
+
| **Robust** | Content must work with assistive technologies and user agents |
|
|
51
|
+
|
|
52
|
+
### Conformance Levels
|
|
53
|
+
|
|
54
|
+
| Level | Description |
|
|
55
|
+
|-------|-------------|
|
|
56
|
+
| A | Minimum conformance (bare minimum) |
|
|
57
|
+
| **AA** | Mid-range conformance (our target) |
|
|
58
|
+
| AAA | Highest conformance level |
|
|
59
|
+
|
|
60
|
+
**Equal Experts targets AA compliance** - this is the standard for most legal requirements.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Visual Accessibility
|
|
65
|
+
|
|
66
|
+
Visual accessibility ensures that design choices don't exclude users with visual impairments, colour blindness, or other conditions that affect how they perceive content.
|
|
67
|
+
|
|
68
|
+
**Key principle:** Design should never rely solely on visual characteristics to convey meaning.
|
|
69
|
+
|
|
70
|
+
### Colour Contrast
|
|
71
|
+
|
|
72
|
+
Sufficient contrast between text and background is essential for readability.
|
|
73
|
+
|
|
74
|
+
| Content Type | Minimum Ratio | Example |
|
|
75
|
+
|--------------|---------------|---------|
|
|
76
|
+
| Body text | 4.5:1 | Standard paragraphs, labels |
|
|
77
|
+
| Large text (18pt+ or 14pt bold) | 3:1 | Headings, large buttons |
|
|
78
|
+
| UI components | 3:1 | Borders, icons, focus indicators |
|
|
79
|
+
| Print materials | 7:1 | Higher due to printing variables |
|
|
80
|
+
|
|
81
|
+
Use contrast checking tools to verify ratios. See [Testing Tools](#testing-tools).
|
|
82
|
+
|
|
83
|
+
### Colour Usage
|
|
84
|
+
|
|
85
|
+
**Never use colour alone to convey information.**
|
|
86
|
+
|
|
87
|
+
| Bad | Good |
|
|
88
|
+
|-----|------|
|
|
89
|
+
| Red text for errors | Red text + error icon + "Error:" prefix |
|
|
90
|
+
| Green for success | Green + checkmark icon + success message |
|
|
91
|
+
| Link only distinguished by colour | Link with underline + colour |
|
|
92
|
+
|
|
93
|
+
### Status Indicators
|
|
94
|
+
|
|
95
|
+
When using colour for status (red/amber/green):
|
|
96
|
+
|
|
97
|
+
1. **Add shapes** - Different shapes for each status (circle, triangle, square)
|
|
98
|
+
2. **Add labels** - Text labels alongside colours
|
|
99
|
+
3. **Include legend** - Always explain what colours mean
|
|
100
|
+
4. **Consider colour blindness** - Red/green are commonly confused
|
|
101
|
+
|
|
102
|
+
### Charts and Data Visualisation
|
|
103
|
+
|
|
104
|
+
- Use patterns or textures in addition to colours
|
|
105
|
+
- Ensure adjacent colours have sufficient contrast
|
|
106
|
+
- Provide data tables as alternatives to charts
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Typography Accessibility
|
|
111
|
+
|
|
112
|
+
### Minimum Sizes
|
|
113
|
+
|
|
114
|
+
| Context | Minimum Size |
|
|
115
|
+
|---------|--------------|
|
|
116
|
+
| Body text | 11pt (14px) |
|
|
117
|
+
| Small text (captions, labels) | 10pt (12px) - use sparingly |
|
|
118
|
+
| Touch device body | 16px recommended |
|
|
119
|
+
|
|
120
|
+
### Line Spacing
|
|
121
|
+
|
|
122
|
+
| Content Type | Line Height |
|
|
123
|
+
|--------------|-------------|
|
|
124
|
+
| Body copy | 1.5x font size |
|
|
125
|
+
| Headings | 1.2x font size |
|
|
126
|
+
| Dense UI (tables) | 1.3x minimum |
|
|
127
|
+
|
|
128
|
+
### Text Scaling
|
|
129
|
+
|
|
130
|
+
- Text must be scalable to 200% without loss of content or functionality
|
|
131
|
+
- Use relative units (rem, em) not fixed pixels for font sizes
|
|
132
|
+
- Test layouts at 200% zoom
|
|
133
|
+
|
|
134
|
+
### Typeface Selection
|
|
135
|
+
|
|
136
|
+
- Prefer sans-serif fonts for screen readability
|
|
137
|
+
- Avoid decorative fonts for body text
|
|
138
|
+
- Ensure consistent character spacing
|
|
139
|
+
|
|
140
|
+
### Text Alignment
|
|
141
|
+
|
|
142
|
+
- **Left-align** body text (default)
|
|
143
|
+
- **Avoid justified** text - uneven spacing hinders readability
|
|
144
|
+
- **Centre-align** sparingly - only for short headings or CTAs
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Motion and Animation
|
|
149
|
+
|
|
150
|
+
### Risks
|
|
151
|
+
|
|
152
|
+
- Flashing content can trigger epileptic seizures
|
|
153
|
+
- Excessive motion causes nausea/disorientation for some users
|
|
154
|
+
- Auto-playing content is distracting
|
|
155
|
+
|
|
156
|
+
### Requirements
|
|
157
|
+
|
|
158
|
+
| Requirement | Implementation |
|
|
159
|
+
|-------------|----------------|
|
|
160
|
+
| No flashing | Never use content that flashes more than 3 times per second |
|
|
161
|
+
| Pause controls | All auto-playing content must have pause/stop controls |
|
|
162
|
+
| Reduced motion | Respect user preferences for reduced motion |
|
|
163
|
+
| Duration limits | Auto-playing content longer than 5 seconds needs controls |
|
|
164
|
+
|
|
165
|
+
### GIFs and Animated Content
|
|
166
|
+
|
|
167
|
+
- Limit excessive movement
|
|
168
|
+
- Provide static fallback images where possible
|
|
169
|
+
- Never use GIFs for essential information
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Icons
|
|
174
|
+
|
|
175
|
+
### Size Requirements
|
|
176
|
+
|
|
177
|
+
| Context | Minimum Size |
|
|
178
|
+
|---------|--------------|
|
|
179
|
+
| Touch targets | 44x44px minimum tap area |
|
|
180
|
+
| Visual icon | 24x24px minimum visible size |
|
|
181
|
+
| Dense UI | 20x20px with adequate spacing |
|
|
182
|
+
|
|
183
|
+
### Accessibility Requirements
|
|
184
|
+
|
|
185
|
+
- **High contrast** - Icons must meet 3:1 contrast ratio
|
|
186
|
+
- **Universal symbols** - Use well-understood icons (magnifying glass for search)
|
|
187
|
+
- **Consistent style** - Same visual style throughout application
|
|
188
|
+
- **Text alternatives** - Provide labels or text alternatives for meaningful icons
|
|
189
|
+
- **Decorative icons** - Mark purely decorative icons appropriately
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Images
|
|
194
|
+
|
|
195
|
+
### Background Images
|
|
196
|
+
|
|
197
|
+
- **Never place text on busy backgrounds**
|
|
198
|
+
- Use colour overlays to improve contrast when text over images is necessary
|
|
199
|
+
- Test text legibility across the full image area
|
|
200
|
+
|
|
201
|
+
### Inclusive Imagery
|
|
202
|
+
|
|
203
|
+
- Represent diverse ages, backgrounds, and perspectives
|
|
204
|
+
- Prioritise diversity year-round, not just during awareness events
|
|
205
|
+
- Avoid stereotypical representations
|
|
206
|
+
|
|
207
|
+
### Decorative vs Meaningful Images
|
|
208
|
+
|
|
209
|
+
| Type | Alt Text | Example |
|
|
210
|
+
|------|----------|---------|
|
|
211
|
+
| Decorative | Empty or none | Background patterns, visual flourishes |
|
|
212
|
+
| Meaningful | Descriptive text | Photos, diagrams, charts |
|
|
213
|
+
| Functional | Describes action | Icons in buttons |
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Content Accessibility
|
|
218
|
+
|
|
219
|
+
Accessible content can be understood by everyone—including people with cognitive disabilities, non-native English speakers, and those using assistive technologies.
|
|
220
|
+
|
|
221
|
+
**Key principle:** Write content that users can understand the first time they read or hear it.
|
|
222
|
+
|
|
223
|
+
### Plain Language
|
|
224
|
+
|
|
225
|
+
| Do | Don't |
|
|
226
|
+
|----|-------|
|
|
227
|
+
| Use short sentences | Write long, complex sentences |
|
|
228
|
+
| Use active voice | Use passive voice |
|
|
229
|
+
| Use common words | Use jargon or technical terms without explanation |
|
|
230
|
+
| Be direct and specific | Be vague or ambiguous |
|
|
231
|
+
| Use concrete examples | Use abstract concepts without illustration |
|
|
232
|
+
|
|
233
|
+
### Readability Targets
|
|
234
|
+
|
|
235
|
+
- Aim for reading level that most users can understand first time
|
|
236
|
+
- Break complex concepts into digestible chunks
|
|
237
|
+
- Test with readability tools (see [Testing Tools](#testing-tools))
|
|
238
|
+
|
|
239
|
+
### Content Structure
|
|
240
|
+
|
|
241
|
+
**Headings:**
|
|
242
|
+
- Descriptive headings that accurately describe the content below
|
|
243
|
+
- Hierarchical structure - H1 → H2 → H3 (never skip levels)
|
|
244
|
+
- One H1 per page - the main page title
|
|
245
|
+
- Headings help users navigate and scan content
|
|
246
|
+
|
|
247
|
+
**Paragraphs:**
|
|
248
|
+
- Keep paragraphs short - 3-4 sentences maximum
|
|
249
|
+
- One idea per paragraph
|
|
250
|
+
- Avoid walls of text - dense blocks are hard to read
|
|
251
|
+
|
|
252
|
+
**Lists:**
|
|
253
|
+
- Use bullet points for unordered items
|
|
254
|
+
- Use numbered lists for sequential steps
|
|
255
|
+
- Keep list items concise
|
|
256
|
+
|
|
257
|
+
**Reading Order:**
|
|
258
|
+
- Content should make sense when read linearly
|
|
259
|
+
- Don't rely on visual layout to convey meaning
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Alternative Text
|
|
264
|
+
|
|
265
|
+
### When Alt Text is Required
|
|
266
|
+
|
|
267
|
+
| Image Type | Alt Text Required | Approach |
|
|
268
|
+
|------------|-------------------|----------|
|
|
269
|
+
| Informative images | Yes | Describe content and purpose |
|
|
270
|
+
| Decorative images | No | Mark as decorative |
|
|
271
|
+
| Functional images (buttons, links) | Yes | Describe the action |
|
|
272
|
+
| Charts and diagrams | Yes | Summarize data, link to full data |
|
|
273
|
+
| Images with text | Yes | Include all text from image |
|
|
274
|
+
|
|
275
|
+
### Writing Good Alt Text
|
|
276
|
+
|
|
277
|
+
| Do | Don't |
|
|
278
|
+
|----|-------|
|
|
279
|
+
| Describe content and purpose | Start with "Image of..." or "Picture of..." |
|
|
280
|
+
| Be concise (under 125 characters) | Write lengthy descriptions |
|
|
281
|
+
| Include text that appears in image | Describe visual appearance only |
|
|
282
|
+
| Provide context for charts | Just say "Chart" or "Graph" |
|
|
283
|
+
|
|
284
|
+
### Examples
|
|
285
|
+
|
|
286
|
+
| Context | Bad Alt Text | Good Alt Text |
|
|
287
|
+
|---------|--------------|---------------|
|
|
288
|
+
| Company logo | "Logo" | "Equal Experts" |
|
|
289
|
+
| Chart | "Bar chart" | "Monthly sales chart showing 40% growth in Q4" |
|
|
290
|
+
| Product photo | "Image of laptop" | "MacBook Pro with dashboard displayed" |
|
|
291
|
+
| Icon button | "Icon" | "Search" |
|
|
292
|
+
|
|
293
|
+
### Complex Images
|
|
294
|
+
|
|
295
|
+
For complex diagrams or charts:
|
|
296
|
+
|
|
297
|
+
1. Provide brief alt text summarizing the image
|
|
298
|
+
2. Include detailed description in surrounding text or linked page
|
|
299
|
+
3. For data charts, provide accessible data table alternative
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## Links and Buttons
|
|
304
|
+
|
|
305
|
+
### Link Text
|
|
306
|
+
|
|
307
|
+
Links should tell users where they're going and why.
|
|
308
|
+
|
|
309
|
+
| Bad | Good |
|
|
310
|
+
|-----|------|
|
|
311
|
+
| "Click here" | "View our pricing plans" |
|
|
312
|
+
| "Read more" | "Read more about accessibility guidelines" |
|
|
313
|
+
| "Learn more" | "Learn more about our consulting services" |
|
|
314
|
+
| URL as link text | Descriptive text for the destination |
|
|
315
|
+
|
|
316
|
+
### Link Visibility
|
|
317
|
+
|
|
318
|
+
- Links must be visually distinct from regular text
|
|
319
|
+
- Use **underline** plus colour change
|
|
320
|
+
- Don't rely on colour alone
|
|
321
|
+
|
|
322
|
+
### Button Labels
|
|
323
|
+
|
|
324
|
+
- Describe the action clearly
|
|
325
|
+
- Use verbs: "Submit", "Save", "Delete", "Cancel"
|
|
326
|
+
- Be specific: "Save changes" not just "Save"
|
|
327
|
+
- Match user expectation to actual outcome
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## Abbreviations and Acronyms
|
|
332
|
+
|
|
333
|
+
### First Use
|
|
334
|
+
|
|
335
|
+
Always spell out abbreviations on first use:
|
|
336
|
+
|
|
337
|
+
- "Artificial Intelligence (AI)" - then use "AI" thereafter
|
|
338
|
+
- "Application Programming Interface (API)"
|
|
339
|
+
- "User Experience (UX)"
|
|
340
|
+
|
|
341
|
+
### Screen Reader Considerations
|
|
342
|
+
|
|
343
|
+
- Use capitals for abbreviations: `HMRC` not `Hmrc`
|
|
344
|
+
- Screen readers may mispronounce lowercase abbreviations as words
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
## Text Formatting
|
|
349
|
+
|
|
350
|
+
### Capitalisation
|
|
351
|
+
|
|
352
|
+
| Do | Don't |
|
|
353
|
+
|----|-------|
|
|
354
|
+
| Use sentence case | USE ALL CAPS FOR EMPHASIS |
|
|
355
|
+
| Capitalise proper nouns | use alternating caps (LiKe ThIs) |
|
|
356
|
+
| Use bold for emphasis | Rely on caps for emphasis |
|
|
357
|
+
|
|
358
|
+
**Why:** Screen readers cannot convey the context of ALL CAPS. Alternating caps is read as gibberish.
|
|
359
|
+
|
|
360
|
+
### Semantic Formatting
|
|
361
|
+
|
|
362
|
+
- Use appropriate markup for important text, not just bold styling
|
|
363
|
+
- Use appropriate markup for emphasis, not just italic styling
|
|
364
|
+
- Use semantic lists, not manual bullet characters
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
## Inclusive Language
|
|
369
|
+
|
|
370
|
+
Inclusive language is part of how Equal Experts writes — it helps us be accurate and build trust. Around 16% of people worldwide experience some form of disability, so it matters that we don't unintentionally exclude anyone from accessing or understanding our work. This section is the authoritative source for inclusive word choices across all content; the [writing style](../content/writing-style.md) guidance links here.
|
|
371
|
+
|
|
372
|
+
### Guidelines
|
|
373
|
+
|
|
374
|
+
- Use language that is respectful and free of bias
|
|
375
|
+
- Avoid terms that contribute to stigmas around disability or mental illness
|
|
376
|
+
- Make content **gender-neutral** wherever possible, and avoid words and phrases that indicate gender bias
|
|
377
|
+
- Avoid words, images, or situations that reinforce racial, ethnic, or religious stereotypes
|
|
378
|
+
- Be considerate with computer and software terminology such as "master", "slave", and "blacklist" — prefer neutral alternatives (for example "main", "primary/replica", "blocklist")
|
|
379
|
+
- Avoid assumptions: when including someone in a piece of content, ask how they'd like to be identified
|
|
380
|
+
- Avoid idioms where possible, or make sure they're clearly explained — they don't always translate across cultures or for non-native readers
|
|
381
|
+
- When in doubt, research current preferred terminology
|
|
382
|
+
|
|
383
|
+
### Person-First Language
|
|
384
|
+
|
|
385
|
+
- "Person with a disability" not "disabled person"
|
|
386
|
+
- "User who is blind" not "blind user"
|
|
387
|
+
- Focus on the person, not the condition
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
391
|
+
## Multimedia Content
|
|
392
|
+
|
|
393
|
+
### Video
|
|
394
|
+
|
|
395
|
+
- **Captions required** - Essential for deaf/hard-of-hearing users
|
|
396
|
+
- 85% of social media videos are watched without sound
|
|
397
|
+
- Captions can be burned-in or added via platform tools
|
|
398
|
+
|
|
399
|
+
### Audio
|
|
400
|
+
|
|
401
|
+
- **Transcripts required** - Full text alternative for audio content
|
|
402
|
+
- Helps users who can't listen (noisy environment, preference)
|
|
403
|
+
- Benefits SEO and searchability
|
|
404
|
+
|
|
405
|
+
### Auto-Playing Content
|
|
406
|
+
|
|
407
|
+
- Provide pause/stop controls
|
|
408
|
+
- Never auto-play audio without user consent
|
|
409
|
+
- Limit duration of auto-playing visual content
|
|
410
|
+
|
|
411
|
+
---
|
|
412
|
+
|
|
413
|
+
## Testing Tools
|
|
414
|
+
|
|
415
|
+
### Colour Contrast
|
|
416
|
+
|
|
417
|
+
- [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/) - Text contrast
|
|
418
|
+
- [Contrast Checker](https://contrastchecker.com/) - Images
|
|
419
|
+
- [Brandwood A11y](https://www.brandwood.com/a11y/) - Text over images
|
|
420
|
+
|
|
421
|
+
### Automated Testing
|
|
422
|
+
|
|
423
|
+
- [WAVE Browser Extension](https://wave.webaim.org/extension/) - Page accessibility evaluation
|
|
424
|
+
- [Axe DevTools](https://www.deque.com/axe/devtools/) - Comprehensive accessibility testing
|
|
425
|
+
|
|
426
|
+
### Content Readability
|
|
427
|
+
|
|
428
|
+
- [WebFX Readability Test](https://www.webfx.com/tools/read-able/)
|
|
429
|
+
- [Hemingway Editor](https://hemingwayapp.com/)
|
|
430
|
+
|
|
431
|
+
---
|
|
432
|
+
|
|
433
|
+
## Further Reading
|
|
434
|
+
|
|
435
|
+
- [Introduction to Web Accessibility (W3C)](https://www.w3.org/WAI/fundamentals/accessibility-intro/)
|
|
436
|
+
- [WCAG 2.2 Guidelines](https://www.w3.org/TR/WCAG22/)
|
|
437
|
+
- [UK Government Accessibility Guidelines](https://gcs.civilservice.gov.uk/guidance/digital-communication/planning-creating-and-publishing-accessible-website-content/)
|
|
438
|
+
|
|
439
|
+
---
|
|
440
|
+
|
|
441
|
+
## Related Documentation
|
|
442
|
+
|
|
443
|
+
- [Colours](../design-language/colours.md) - Brand colour palette and contrast
|
|
444
|
+
- [Typography](../design-language/typography.md) - Font families and type scale
|
|
445
|
+
- [Writing style](../content/writing-style.md) - Writing style and tone
|
|
446
|
+
- [Web Technical Accessibility](../media-types/web-product/accessibility.md) - Implementation details
|