Skip to content

Commit 4d638a2

Browse files
committed
create component icon
1 parent ee65f88 commit 4d638a2

58 files changed

Lines changed: 889 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
Because the interactive icon has no visible label and no button container, the glyph is the only cue, state is conveyed by color, and the small, container-less hit area must still be reachable and operable for everyone.
2+
3+
### Key Challenges
4+
5+
- Providing an accessible name when there is no visible text label
6+
- Conveying interactive state without a background — color transitions only
7+
- Keeping an adequate interactive target despite the container-less, custom size
8+
- Announcing the Loading state so users know the action is processing
9+
10+
### Critical Success Factors
11+
12+
1. Use a native `<button>` element wrapping the icon for keyboard and screen-reader support
13+
2. Give every interactive icon a descriptive accessible name via `aria-label`
14+
3. Preserve a minimum 28px interactive area (larger where touch is the primary input)
15+
4. Provide a visible focus indicator with ≥3:1 contrast against adjacent colors
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
The interactive icon must meet WCAG 2.2 Level AA. With no visible label and no container, it must expose an accessible name, convey state without relying on color alone, and keep an operable target. For comprehensive guidance, see the [Orange Unified Design System Accessibility Overview](https://unified-design-system.orange.com/472794e18/p/88ebab-accessibility-and-sustainability).
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
- [Orange Accessibility Guidelines - Interactive Components](https://a11y-guidelines.orange.com/en/web/components-examples/)
2+
- [W3C WAI - Button Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/button/)
3+
- [WCAG 2.2 Understanding Target Size (Minimum)](https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html)
4+
- [Orange Design System - Accessibility & Sustainability](https://unified-design-system.orange.com/472794e18/p/88ebab-accessibility-and-sustainability)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
### Structure & Labels
2+
3+
- [ ] **Semantic markup**: Wrap the icon in a native `<button>` for automatic keyboard and screen-reader support
4+
- [ ] **Accessible name**: Always provide a descriptive `aria-label` ([Label guidance](https://a11y-guidelines.orange.com/en/web/develop/textual-content/#make-sure-the-user-can-use-native-browser-options))
5+
- [ ] **State communication**: Expose the Loading state with `aria-busy="true"` and announce completion
6+
7+
### Visual Design
8+
9+
- [ ] **Focus visibility**: Display a focus ring with ≥3:1 contrast against adjacent colors ([Focus guidance](https://a11y-guidelines.orange.com/en/web/design/navigation-focus/))
10+
- [ ] **Color independence**: State is shown by color only — pair it with focus and the icon so meaning isn't color-dependent
11+
- [ ] **Interactive area**: Maintain at least a 28px interactive target; enlarge it for touch-first contexts
12+
13+
### Content
14+
15+
- [ ] **Descriptive name**: ❌ "icon" / ✅ "Close dialog" ([Content guidance](https://a11y-guidelines.orange.com/en/web/design/textual-content/))
16+
- [ ] **No duplication**: If a visible label already exists nearby, don't repeat it redundantly in the accessible name
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
- **2.1.1 Keyboard** (A): All interactive-icon functionality operable via keyboard without timing
2+
- **2.4.7 Focus Visible** (AA): Visible focus indicator present on the icon when focused
3+
- **4.1.2 Name, Role, Value** (A): Button role, accessible name, and state programmatically exposed
4+
- **1.4.11 Non-text Contrast** (AA): Icon, focus indicator, and interactive states meet ≥3:1 contrast
5+
- **2.5.8 Target Size (Minimum)** (AA): Interactive target meets the minimum size, with spacing where smaller
6+
7+
For complete reference: [Orange Accessibility Guidelines - Components](https://a11y-guidelines.orange.com/en/web/components-examples/)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
### Screen Reader Testing
2+
3+
- [ ] Test with NVDA (Windows), JAWS (Windows), VoiceOver (macOS/iOS), TalkBack (Android)
4+
- [ ] Verify button role announced, accessible name read, and Loading state communicated
5+
6+
### Keyboard Testing
7+
8+
- [ ] Tab to the icon (focus visible), activate with Enter/Space, confirm the action triggers
9+
- [ ] Verify focus remains managed during and after the Loading state
10+
11+
### Loading State Testing
12+
13+
- [ ] Confirm the Loading state is announced and the icon is not prematurely re-triggerable
14+
15+
Resources: [Orange Accessibility Testing Guide](https://a11y-guidelines.orange.com/en/web/testing/)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Changelog
2+
3+
| Date | Number | Notes | Designer |
4+
|------|--------|-------|----------|
5+
| Jun 8, 2026 | 1.0.0 | Version 2.6 of the design tokens is required for the development of this update.<ul><li>Component creation</ul> | Maxime Tonnerre |
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
| # | Element | Purpose | Optional |
2+
|---|---------|---------|----------|
3+
| 1 | Icon | The glyph communicating the action | N |
4+
| 2 | Interactive area | Invisible hit target around the icon (min 28px) for pointer/touch | N |
5+
| 3 | Color treatment | State feedback expressed through icon color transitions (no background) | N |
6+
| 4 | Focus ring | Visible outline indicating keyboard focus for accessibility | N |
7+
| 5 | Loading indicator | Spinner shown in place of the icon during the Loading state | Y |
8+
| 6 | Skeleton placeholder | Neutral shape shown before the icon has fully loaded | Y |
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
✅ Inline actions placed directly next to text or form fields
2+
3+
✅ Compact toolbars where an icon-only action saves space
4+
5+
✅ Toggling a state (open/close, show/hide, expand/collapse)
6+
7+
✅ Lightweight actions inside content cards, rows, or list items
8+
9+
✅ Embedding an action within another component (input, menu, chip)
10+
11+
✅ Dense interfaces where a button's touch target would feel heavy
12+
13+
✅ Repeated actions in tables or lists where buttons would add noise
14+
15+
✅ Custom-sized affordances that must scale with the surrounding layout
16+
17+
✅ Secondary actions that shouldn't compete with primary buttons
18+
19+
✅ Icon-driven actions where the meaning is already clear from context
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
An Interactive Icon is an icon component designed to trigger a user interaction (e.g., open, close, toggle a state). It includes defined interactive states and can be used independently or within other components such as buttons, inputs, or menus.

0 commit comments

Comments
 (0)