@pudge-ui/mcp-server 0.1.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/README.md +63 -0
- package/dist/__tests__/catalog.test.d.ts +1 -0
- package/dist/__tests__/catalog.test.js +50 -0
- package/dist/__tests__/search.test.d.ts +1 -0
- package/dist/__tests__/search.test.js +44 -0
- package/dist/__tests__/validation.test.d.ts +1 -0
- package/dist/__tests__/validation.test.js +34 -0
- package/dist/assembler.d.ts +6 -0
- package/dist/assembler.js +95 -0
- package/dist/catalog.d.ts +22 -0
- package/dist/catalog.js +10 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +33 -0
- package/dist/search.d.ts +5 -0
- package/dist/search.js +21 -0
- package/dist/tools.d.ts +105 -0
- package/dist/tools.js +129 -0
- package/package.json +55 -0
- package/spec/components/_index.yaml +822 -0
- package/spec/components/buttons/clear-button.md +89 -0
- package/spec/components/buttons/fn-grid.md +104 -0
- package/spec/components/buttons/gel-button.md +125 -0
- package/spec/components/buttons/icon-button.md +108 -0
- package/spec/components/buttons/keypad-button.md +123 -0
- package/spec/components/buttons/push-button.md +139 -0
- package/spec/components/buttons/rec-button.md +105 -0
- package/spec/components/buttons/rubber-button.md +100 -0
- package/spec/components/buttons/segmented-control.md +95 -0
- package/spec/components/data/assembled-panel.md +135 -0
- package/spec/components/data/data-table.md +116 -0
- package/spec/components/data/film-strip.md +110 -0
- package/spec/components/data/media-grid.md +98 -0
- package/spec/components/dials/click-wheel.md +115 -0
- package/spec/components/dials/cylindrical-horizontal.md +130 -0
- package/spec/components/dials/cylindrical-scroll.md +141 -0
- package/spec/components/dials/cylindrical-vertical.md +100 -0
- package/spec/components/dials/mode-dial.md +123 -0
- package/spec/components/dials/radial-knob.md +150 -0
- package/spec/components/dials/rotary-encoder.md +118 -0
- package/spec/components/forms/color-picker.md +99 -0
- package/spec/components/forms/file-input.md +105 -0
- package/spec/components/forms/search-bar.md +96 -0
- package/spec/components/forms/select.md +143 -0
- package/spec/components/forms/text-input.md +114 -0
- package/spec/components/forms/textarea.md +85 -0
- package/spec/components/indicators/accordion.md +137 -0
- package/spec/components/indicators/badges.md +87 -0
- package/spec/components/indicators/chips.md +93 -0
- package/spec/components/indicators/led-dots.md +103 -0
- package/spec/components/indicators/mode-badge.md +97 -0
- package/spec/components/indicators/profile-badge.md +99 -0
- package/spec/components/indicators/skeleton.md +94 -0
- package/spec/components/indicators/spinners.md +95 -0
- package/spec/components/indicators/status-chips.md +85 -0
- package/spec/components/indicators/transport-controls.md +114 -0
- package/spec/components/meters/battery-icon.md +104 -0
- package/spec/components/meters/eq-bars.md +93 -0
- package/spec/components/meters/ev-meter.md +96 -0
- package/spec/components/meters/exposure-scale.md +110 -0
- package/spec/components/meters/gauge-full.md +102 -0
- package/spec/components/meters/gauge-semi.md +113 -0
- package/spec/components/meters/histogram.md +70 -0
- package/spec/components/meters/level-indicator.md +95 -0
- package/spec/components/meters/oscilloscope.md +83 -0
- package/spec/components/meters/progress-bar.md +84 -0
- package/spec/components/meters/signal-bars.md +80 -0
- package/spec/components/meters/signal-meter.md +84 -0
- package/spec/components/meters/vu-meter.md +88 -0
- package/spec/components/meters/waveform.md +70 -0
- package/spec/components/navigation/breadcrumbs.md +94 -0
- package/spec/components/navigation/context-menu.md +94 -0
- package/spec/components/navigation/d-pad.md +121 -0
- package/spec/components/navigation/drawer.md +103 -0
- package/spec/components/navigation/menu-grid.md +113 -0
- package/spec/components/navigation/menu-list.md +134 -0
- package/spec/components/navigation/pagination.md +100 -0
- package/spec/components/navigation/rack-panel.md +124 -0
- package/spec/components/navigation/scrollbar.md +97 -0
- package/spec/components/navigation/status-bar.md +117 -0
- package/spec/components/navigation/tab-bar.md +104 -0
- package/spec/components/overlays/chassis-panel.md +94 -0
- package/spec/components/overlays/device-bezel.md +83 -0
- package/spec/components/overlays/dialog.md +100 -0
- package/spec/components/overlays/focus-brackets.md +124 -0
- package/spec/components/overlays/grid-overlay.md +93 -0
- package/spec/components/overlays/modal.md +89 -0
- package/spec/components/overlays/panel.md +114 -0
- package/spec/components/overlays/plastic-card.md +92 -0
- package/spec/components/overlays/popover.md +75 -0
- package/spec/components/overlays/toast.md +93 -0
- package/spec/components/overlays/tooltip.md +85 -0
- package/spec/components/readouts/camera-readout.md +123 -0
- package/spec/components/readouts/dot-matrix.md +88 -0
- package/spec/components/readouts/lcd-readout.md +116 -0
- package/spec/components/readouts/resource-monitor.md +98 -0
- package/spec/components/readouts/seven-segment.md +110 -0
- package/spec/components/readouts/signal-display.md +93 -0
- package/spec/components/readouts/timecode-display.md +94 -0
- package/spec/components/sliders/crossfader.md +102 -0
- package/spec/components/sliders/dual-range.md +97 -0
- package/spec/components/sliders/range-fader.md +100 -0
- package/spec/components/sliders/scrubber.md +104 -0
- package/spec/components/sliders/stepper.md +106 -0
- package/spec/components/sliders/vertical-fader.md +116 -0
- package/spec/components/sliders/volume-slider.md +107 -0
- package/spec/components/toggles/dip-switch.md +100 -0
- package/spec/components/toggles/led-checkbox.md +108 -0
- package/spec/components/toggles/power-toggle.md +93 -0
- package/spec/components/toggles/radio-button.md +106 -0
- package/spec/components/toggles/rocker-switch.md +92 -0
- package/spec/components/toggles/slide-switch.md +121 -0
- package/spec/components/toggles/toggle-switch.md +135 -0
- package/spec/compositions/audio-mixer-strip.md +62 -0
- package/spec/compositions/camera-viewfinder.md +66 -0
- package/spec/compositions/phone-interface.md +66 -0
- package/spec/foundation/accessibility.md +33 -0
- package/spec/foundation/canvas.md +20 -0
- package/spec/foundation/depth-model.md +82 -0
- package/spec/foundation/layout.md +33 -0
- package/spec/foundation/materials.md +68 -0
- package/spec/foundation/naming.md +33 -0
- package/spec/foundation/philosophy.md +27 -0
- package/spec/foundation/theme.md +39 -0
- package/spec/foundation/tokens.md +148 -0
- package/spec/guides/extension.md +189 -0
- package/spec/guides/for-llms.md +129 -0
- package/spec/guides/prompt-templates.md +143 -0
- package/spec/spec/components/_index.yaml +822 -0
- package/spec/spec/components/buttons/clear-button.md +89 -0
- package/spec/spec/components/buttons/fn-grid.md +104 -0
- package/spec/spec/components/buttons/gel-button.md +125 -0
- package/spec/spec/components/buttons/icon-button.md +108 -0
- package/spec/spec/components/buttons/keypad-button.md +123 -0
- package/spec/spec/components/buttons/push-button.md +139 -0
- package/spec/spec/components/buttons/rec-button.md +105 -0
- package/spec/spec/components/buttons/rubber-button.md +100 -0
- package/spec/spec/components/buttons/segmented-control.md +95 -0
- package/spec/spec/components/data/assembled-panel.md +135 -0
- package/spec/spec/components/data/data-table.md +116 -0
- package/spec/spec/components/data/film-strip.md +110 -0
- package/spec/spec/components/data/media-grid.md +98 -0
- package/spec/spec/components/dials/click-wheel.md +115 -0
- package/spec/spec/components/dials/cylindrical-horizontal.md +130 -0
- package/spec/spec/components/dials/cylindrical-scroll.md +141 -0
- package/spec/spec/components/dials/cylindrical-vertical.md +100 -0
- package/spec/spec/components/dials/mode-dial.md +123 -0
- package/spec/spec/components/dials/radial-knob.md +150 -0
- package/spec/spec/components/dials/rotary-encoder.md +118 -0
- package/spec/spec/components/forms/color-picker.md +99 -0
- package/spec/spec/components/forms/file-input.md +105 -0
- package/spec/spec/components/forms/search-bar.md +96 -0
- package/spec/spec/components/forms/select.md +143 -0
- package/spec/spec/components/forms/text-input.md +114 -0
- package/spec/spec/components/forms/textarea.md +85 -0
- package/spec/spec/components/indicators/accordion.md +137 -0
- package/spec/spec/components/indicators/badges.md +87 -0
- package/spec/spec/components/indicators/chips.md +93 -0
- package/spec/spec/components/indicators/led-dots.md +103 -0
- package/spec/spec/components/indicators/mode-badge.md +97 -0
- package/spec/spec/components/indicators/profile-badge.md +99 -0
- package/spec/spec/components/indicators/skeleton.md +94 -0
- package/spec/spec/components/indicators/spinners.md +95 -0
- package/spec/spec/components/indicators/status-chips.md +85 -0
- package/spec/spec/components/indicators/transport-controls.md +114 -0
- package/spec/spec/components/meters/battery-icon.md +104 -0
- package/spec/spec/components/meters/eq-bars.md +93 -0
- package/spec/spec/components/meters/ev-meter.md +96 -0
- package/spec/spec/components/meters/exposure-scale.md +110 -0
- package/spec/spec/components/meters/gauge-full.md +102 -0
- package/spec/spec/components/meters/gauge-semi.md +113 -0
- package/spec/spec/components/meters/histogram.md +70 -0
- package/spec/spec/components/meters/level-indicator.md +95 -0
- package/spec/spec/components/meters/oscilloscope.md +83 -0
- package/spec/spec/components/meters/progress-bar.md +84 -0
- package/spec/spec/components/meters/signal-bars.md +80 -0
- package/spec/spec/components/meters/signal-meter.md +84 -0
- package/spec/spec/components/meters/vu-meter.md +88 -0
- package/spec/spec/components/meters/waveform.md +70 -0
- package/spec/spec/components/navigation/breadcrumbs.md +94 -0
- package/spec/spec/components/navigation/context-menu.md +94 -0
- package/spec/spec/components/navigation/d-pad.md +121 -0
- package/spec/spec/components/navigation/drawer.md +103 -0
- package/spec/spec/components/navigation/menu-grid.md +113 -0
- package/spec/spec/components/navigation/menu-list.md +134 -0
- package/spec/spec/components/navigation/pagination.md +100 -0
- package/spec/spec/components/navigation/rack-panel.md +124 -0
- package/spec/spec/components/navigation/scrollbar.md +97 -0
- package/spec/spec/components/navigation/status-bar.md +117 -0
- package/spec/spec/components/navigation/tab-bar.md +104 -0
- package/spec/spec/components/overlays/chassis-panel.md +94 -0
- package/spec/spec/components/overlays/device-bezel.md +83 -0
- package/spec/spec/components/overlays/dialog.md +100 -0
- package/spec/spec/components/overlays/focus-brackets.md +124 -0
- package/spec/spec/components/overlays/grid-overlay.md +93 -0
- package/spec/spec/components/overlays/modal.md +89 -0
- package/spec/spec/components/overlays/panel.md +114 -0
- package/spec/spec/components/overlays/plastic-card.md +92 -0
- package/spec/spec/components/overlays/popover.md +75 -0
- package/spec/spec/components/overlays/toast.md +93 -0
- package/spec/spec/components/overlays/tooltip.md +85 -0
- package/spec/spec/components/readouts/camera-readout.md +123 -0
- package/spec/spec/components/readouts/dot-matrix.md +88 -0
- package/spec/spec/components/readouts/lcd-readout.md +116 -0
- package/spec/spec/components/readouts/resource-monitor.md +98 -0
- package/spec/spec/components/readouts/seven-segment.md +110 -0
- package/spec/spec/components/readouts/signal-display.md +93 -0
- package/spec/spec/components/readouts/timecode-display.md +94 -0
- package/spec/spec/components/sliders/crossfader.md +102 -0
- package/spec/spec/components/sliders/dual-range.md +97 -0
- package/spec/spec/components/sliders/range-fader.md +100 -0
- package/spec/spec/components/sliders/scrubber.md +104 -0
- package/spec/spec/components/sliders/stepper.md +106 -0
- package/spec/spec/components/sliders/vertical-fader.md +116 -0
- package/spec/spec/components/sliders/volume-slider.md +107 -0
- package/spec/spec/components/toggles/dip-switch.md +100 -0
- package/spec/spec/components/toggles/led-checkbox.md +108 -0
- package/spec/spec/components/toggles/power-toggle.md +93 -0
- package/spec/spec/components/toggles/radio-button.md +106 -0
- package/spec/spec/components/toggles/rocker-switch.md +92 -0
- package/spec/spec/components/toggles/slide-switch.md +121 -0
- package/spec/spec/components/toggles/toggle-switch.md +135 -0
- package/spec/spec/compositions/audio-mixer-strip.md +62 -0
- package/spec/spec/compositions/camera-viewfinder.md +66 -0
- package/spec/spec/compositions/phone-interface.md +66 -0
- package/spec/spec/foundation/accessibility.md +33 -0
- package/spec/spec/foundation/canvas.md +20 -0
- package/spec/spec/foundation/depth-model.md +82 -0
- package/spec/spec/foundation/layout.md +33 -0
- package/spec/spec/foundation/materials.md +68 -0
- package/spec/spec/foundation/naming.md +33 -0
- package/spec/spec/foundation/philosophy.md +27 -0
- package/spec/spec/foundation/theme.md +39 -0
- package/spec/spec/foundation/tokens.md +148 -0
- package/spec/spec/guides/extension.md +189 -0
- package/spec/spec/guides/for-llms.md +129 -0
- package/spec/spec/guides/prompt-templates.md +143 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Level Indicator
|
|
3
|
+
id: level-bar
|
|
4
|
+
class: .level-bar
|
|
5
|
+
category: meters
|
|
6
|
+
index: 10
|
|
7
|
+
materials: [panel]
|
|
8
|
+
sizes: [md]
|
|
9
|
+
interactive: false
|
|
10
|
+
requires_js: false
|
|
11
|
+
canvas: false
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Level Indicator
|
|
15
|
+
|
|
16
|
+
## Physical Analog
|
|
17
|
+
**Reference devices**: Camera electronic level/horizon indicator (Sony Alpha, Nikon Z series).
|
|
18
|
+
**Mechanism**: Derived from spirit level / bubble level. Accelerometer data drives bar indicator where center mark = level (0 degrees). Fill represents current tilt angle and direction.
|
|
19
|
+
|
|
20
|
+
## Geometry
|
|
21
|
+
|
|
22
|
+
| Property | Value |
|
|
23
|
+
|----------|-------|
|
|
24
|
+
| Bar | 160px wide x 8px height |
|
|
25
|
+
| Center mark | 1px at 50% |
|
|
26
|
+
| Fill | Amber, positioned relative to center |
|
|
27
|
+
| Border-radius | pill (100px) |
|
|
28
|
+
|
|
29
|
+
## CSS Recipe
|
|
30
|
+
|
|
31
|
+
### Wrapper
|
|
32
|
+
```css
|
|
33
|
+
.level-wrap { display: flex; flex-direction: column; align-items: center; gap: 6px; }
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Bar
|
|
37
|
+
```css
|
|
38
|
+
.level-bar {
|
|
39
|
+
width: 160px; height: 8px; background: var(--bg-inset);
|
|
40
|
+
border: 1px solid var(--border-subtle); border-radius: var(--radius-pill);
|
|
41
|
+
position: relative; overflow: hidden; box-shadow: inset 0 1px 3px rgba(0,0,0,0.4);
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Fill
|
|
46
|
+
```css
|
|
47
|
+
.level-fill {
|
|
48
|
+
position: absolute; top: 1px; bottom: 1px;
|
|
49
|
+
background: var(--amber); border-radius: var(--radius-pill);
|
|
50
|
+
transition: left 0.1s, width 0.1s;
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Center Mark
|
|
55
|
+
```css
|
|
56
|
+
.level-center-mark { position: absolute; top: 0; bottom: 0; left: 50%; width: 1px; background: #444; z-index: 2; }
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Text Label
|
|
60
|
+
```css
|
|
61
|
+
.level-text { font-size: 8px; color: var(--text-muted); letter-spacing: 2px; font-family: var(--font-ui); }
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## HTML Structure
|
|
65
|
+
```html
|
|
66
|
+
<div class="level-wrap">
|
|
67
|
+
<div class="level-bar">
|
|
68
|
+
<div class="level-center-mark"></div>
|
|
69
|
+
<div class="level-fill" style="left:45%;width:10%"></div>
|
|
70
|
+
</div>
|
|
71
|
+
<span class="level-text">HORIZON — +2°</span>
|
|
72
|
+
</div>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Size Variants
|
|
76
|
+
No explicit size variants.
|
|
77
|
+
|
|
78
|
+
## Material Variants
|
|
79
|
+
- Bar: Recessed panel with pill shape
|
|
80
|
+
- Fill: Solid amber
|
|
81
|
+
|
|
82
|
+
## Theme Behavior
|
|
83
|
+
- Bar adapts via tokens
|
|
84
|
+
- Amber fill is fixed
|
|
85
|
+
- Center mark is fixed at `#444`
|
|
86
|
+
|
|
87
|
+
## Constraints
|
|
88
|
+
1. Center mark MUST be at exact 50% horizontal position.
|
|
89
|
+
2. Fill uses `left` and `width` to show position and magnitude of tilt.
|
|
90
|
+
3. Pill border-radius (100px) for level-instrument aesthetic.
|
|
91
|
+
4. Fill transitions use 0.1s for responsive feedback.
|
|
92
|
+
|
|
93
|
+
## Accessibility
|
|
94
|
+
- Use `role="meter"` with `aria-valuenow` for tilt angle
|
|
95
|
+
- `aria-label="Horizon level"`
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Oscilloscope
|
|
3
|
+
id: oscilloscope
|
|
4
|
+
class: .oscilloscope
|
|
5
|
+
category: meters
|
|
6
|
+
index: 14
|
|
7
|
+
materials: [phosphor-screen]
|
|
8
|
+
sizes: [md]
|
|
9
|
+
interactive: false
|
|
10
|
+
requires_js: true
|
|
11
|
+
canvas: true
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Oscilloscope
|
|
15
|
+
|
|
16
|
+
## Physical Analog
|
|
17
|
+
**Reference devices**: Tektronix analog oscilloscopes, audio test equipment, synthesizer waveform monitors.
|
|
18
|
+
**Mechanism**: Cathode ray tube (CRT) display. Electron beam deflected by input signal (vertical) while swept horizontally at constant rate. Beam strikes P31 phosphor screen which glows briefly, creating trailing afterglow effect.
|
|
19
|
+
|
|
20
|
+
## Geometry
|
|
21
|
+
|
|
22
|
+
| Property | Value |
|
|
23
|
+
|----------|-------|
|
|
24
|
+
| Container | 200x80px |
|
|
25
|
+
| Center line | 1px at 50% height (zero-voltage reference) |
|
|
26
|
+
| Canvas | Full container size |
|
|
27
|
+
|
|
28
|
+
## CSS Recipe
|
|
29
|
+
|
|
30
|
+
### Container
|
|
31
|
+
```css
|
|
32
|
+
.oscilloscope {
|
|
33
|
+
width: 200px; height: 80px; background: var(--bg-inset);
|
|
34
|
+
border: 1px solid var(--border-subtle); border-radius: var(--radius-sm);
|
|
35
|
+
box-shadow: inset 0 1px 4px rgba(0,0,0,0.5); position: relative; overflow: hidden;
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Zero Reference Line
|
|
40
|
+
```css
|
|
41
|
+
.oscilloscope-line {
|
|
42
|
+
position: absolute; top: 50%; left: 0; right: 0; height: 1px;
|
|
43
|
+
background: rgba(102,255,102,0.15);
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Canvas
|
|
48
|
+
```css
|
|
49
|
+
.oscilloscope canvas { display: block; width: 100%; height: 100%; }
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## HTML Structure
|
|
53
|
+
```html
|
|
54
|
+
<div class="oscilloscope">
|
|
55
|
+
<div class="oscilloscope-line"></div>
|
|
56
|
+
<canvas width="200" height="80" id="oscCanvas"></canvas>
|
|
57
|
+
</div>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Size Variants
|
|
61
|
+
No explicit size variants.
|
|
62
|
+
|
|
63
|
+
## Material Variants
|
|
64
|
+
Single material: Phosphor screen (CRT display).
|
|
65
|
+
|
|
66
|
+
## Theme Behavior
|
|
67
|
+
- Container adapts via tokens
|
|
68
|
+
- Phosphor green color is fixed
|
|
69
|
+
- Center line green tint is fixed
|
|
70
|
+
|
|
71
|
+
## Constraints
|
|
72
|
+
1. Background fade (`rgba(14,12,10,0.3)` fill each frame) simulates phosphor decay -- previous trace fades gradually.
|
|
73
|
+
2. Trace color MUST be green (`rgba(102,255,102,0.8)`) matching P31 phosphor.
|
|
74
|
+
3. Canvas `shadowBlur` of 4px green simulates phosphor glow/bloom.
|
|
75
|
+
4. Center reference line is ALWAYS faintly visible (zero-voltage reference), even with no signal.
|
|
76
|
+
5. Animation uses `requestAnimationFrame` loop.
|
|
77
|
+
6. Waveform: `sin(x*0.06 + t)` + harmonics with time offset.
|
|
78
|
+
|
|
79
|
+
## Accessibility
|
|
80
|
+
- Use `role="img"` with `aria-label` on the canvas
|
|
81
|
+
- Provide text description of the waveform if informational
|
|
82
|
+
- Consider `prefers-reduced-motion` to pause animation
|
|
83
|
+
- Requires JS for canvas animation
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Progress Bar
|
|
3
|
+
id: progress-track
|
|
4
|
+
class: .progress-track
|
|
5
|
+
category: meters
|
|
6
|
+
index: 7
|
|
7
|
+
materials: [panel]
|
|
8
|
+
sizes: [md]
|
|
9
|
+
interactive: false
|
|
10
|
+
requires_js: false
|
|
11
|
+
canvas: false
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Progress Bar
|
|
15
|
+
|
|
16
|
+
## Physical Analog
|
|
17
|
+
**Reference devices**: iPod file transfer progress, Windows XP file copy dialog, CD burning progress.
|
|
18
|
+
**Mechanism**: Linear indicator showing completion percentage of time-bound process. Track = total work, fill = completed work.
|
|
19
|
+
|
|
20
|
+
## Geometry
|
|
21
|
+
|
|
22
|
+
| Property | Value |
|
|
23
|
+
|----------|-------|
|
|
24
|
+
| Track | 100% width x 8px height |
|
|
25
|
+
| Fill gradient | Blue-to-green |
|
|
26
|
+
| Container width | 180px |
|
|
27
|
+
|
|
28
|
+
## CSS Recipe
|
|
29
|
+
|
|
30
|
+
### Wrapper
|
|
31
|
+
```css
|
|
32
|
+
.progress-wrap { display: flex; flex-direction: column; gap: 4px; width: 180px; }
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Track
|
|
36
|
+
```css
|
|
37
|
+
.progress-track {
|
|
38
|
+
width: 100%; height: 8px; border-radius: 4px;
|
|
39
|
+
background: var(--bg-inset); border: 1px solid var(--border-subtle);
|
|
40
|
+
overflow: hidden; box-shadow: var(--shadow-inset);
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Fill
|
|
45
|
+
```css
|
|
46
|
+
.progress-fill { height: 100%; border-radius: 3px; background: linear-gradient(90deg, var(--blue-info), var(--green-on)); transition: width 0.3s var(--ease-out); }
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Label
|
|
50
|
+
```css
|
|
51
|
+
.progress-label {
|
|
52
|
+
display: flex; justify-content: space-between;
|
|
53
|
+
font-family: var(--font-ui); font-size: 9px; font-weight: 500;
|
|
54
|
+
color: var(--text-muted); letter-spacing: 1px;
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## HTML Structure
|
|
59
|
+
```html
|
|
60
|
+
<div class="progress-wrap">
|
|
61
|
+
<div class="progress-track"><div class="progress-fill" style="width:65%"></div></div>
|
|
62
|
+
<div class="progress-label"><span>TRANSFER</span><span>65%</span></div>
|
|
63
|
+
</div>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Size Variants
|
|
67
|
+
No explicit size variants.
|
|
68
|
+
|
|
69
|
+
## Material Variants
|
|
70
|
+
- Track: Recessed panel
|
|
71
|
+
- Fill: Blue-to-green gradient
|
|
72
|
+
|
|
73
|
+
## Theme Behavior
|
|
74
|
+
- Track adapts via tokens
|
|
75
|
+
- Fill gradient colors are fixed
|
|
76
|
+
|
|
77
|
+
## Constraints
|
|
78
|
+
1. Fill transition MUST use `--ease-out` with 0.3s duration for smooth progress animation.
|
|
79
|
+
2. Track has `overflow: hidden` to clip the fill at edges.
|
|
80
|
+
3. Label row shows description on left, percentage on right.
|
|
81
|
+
|
|
82
|
+
## Accessibility
|
|
83
|
+
- Use `role="progressbar"` with `aria-valuenow`, `aria-valuemin="0"`, `aria-valuemax="100"`
|
|
84
|
+
- `aria-label` should describe the process
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Signal Bars
|
|
3
|
+
id: signal-bars
|
|
4
|
+
class: .signal-bars
|
|
5
|
+
category: meters
|
|
6
|
+
index: 8
|
|
7
|
+
materials: [panel]
|
|
8
|
+
sizes: [md]
|
|
9
|
+
interactive: false
|
|
10
|
+
requires_js: false
|
|
11
|
+
canvas: false
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Signal Bars
|
|
15
|
+
|
|
16
|
+
## Physical Analog
|
|
17
|
+
**Reference devices**: Nokia phone signal indicator (universally adopted since ~1998).
|
|
18
|
+
**Mechanism**: Received signal strength indication (RSSI) from cellular radio. 5-bar ascending staircase standardized by Nokia. Each bar = one step of signal quality. Bars light left-to-right as signal improves. Unlit bars shown as dim outlines.
|
|
19
|
+
|
|
20
|
+
## Geometry
|
|
21
|
+
|
|
22
|
+
| Property | Value |
|
|
23
|
+
|----------|-------|
|
|
24
|
+
| Container height | 24px |
|
|
25
|
+
| Bar width | 4px |
|
|
26
|
+
| Bar gap | 3px |
|
|
27
|
+
| Bar heights | 6px, 10px, 14px, 18px, 22px (ascending) |
|
|
28
|
+
|
|
29
|
+
## CSS Recipe
|
|
30
|
+
|
|
31
|
+
### Container
|
|
32
|
+
```css
|
|
33
|
+
.signal-bars { display: flex; align-items: flex-end; gap: 3px; height: 24px; }
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Bars
|
|
37
|
+
```css
|
|
38
|
+
.signal-strength-bar { width: 4px; border-radius: 1px; background: var(--green-on); transition: opacity 0.2s; }
|
|
39
|
+
.signal-strength-bar:nth-child(1) { height: 6px; }
|
|
40
|
+
.signal-strength-bar:nth-child(2) { height: 10px; }
|
|
41
|
+
.signal-strength-bar:nth-child(3) { height: 14px; }
|
|
42
|
+
.signal-strength-bar:nth-child(4) { height: 18px; }
|
|
43
|
+
.signal-strength-bar:nth-child(5) { height: 22px; }
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Off State (Dim)
|
|
47
|
+
```css
|
|
48
|
+
.signal-strength-bar.off { opacity: 0.15; background: var(--text-muted); }
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## HTML Structure
|
|
52
|
+
```html
|
|
53
|
+
<div class="signal-bars">
|
|
54
|
+
<div class="signal-strength-bar"></div>
|
|
55
|
+
<div class="signal-strength-bar"></div>
|
|
56
|
+
<div class="signal-strength-bar"></div>
|
|
57
|
+
<div class="signal-strength-bar off"></div>
|
|
58
|
+
<div class="signal-strength-bar off"></div>
|
|
59
|
+
</div>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Size Variants
|
|
63
|
+
No explicit size variants.
|
|
64
|
+
|
|
65
|
+
## Material Variants
|
|
66
|
+
- Active: Solid green
|
|
67
|
+
- Off: Muted at 15% opacity
|
|
68
|
+
|
|
69
|
+
## Theme Behavior
|
|
70
|
+
- Green bar color is fixed
|
|
71
|
+
- Off state uses `--text-muted` (adapts per theme)
|
|
72
|
+
|
|
73
|
+
## Constraints
|
|
74
|
+
1. Bars MUST ascend left-to-right (6, 10, 14, 18, 22px).
|
|
75
|
+
2. Off bars MUST use `.off` class with `opacity: 0.15` and muted color.
|
|
76
|
+
3. Always 5 bars total (Nokia convention).
|
|
77
|
+
4. Bar border-radius is 1px (minimal rounding).
|
|
78
|
+
|
|
79
|
+
## Accessibility
|
|
80
|
+
- Use `role="img"` with `aria-label` (e.g., "Signal strength: 3 of 5 bars")
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Signal Meter
|
|
3
|
+
id: signal-meter
|
|
4
|
+
class: .signal-meter
|
|
5
|
+
category: meters
|
|
6
|
+
index: 1
|
|
7
|
+
materials: [phosphor-screen]
|
|
8
|
+
sizes: [md]
|
|
9
|
+
interactive: false
|
|
10
|
+
requires_js: false
|
|
11
|
+
canvas: false
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Signal Meter
|
|
15
|
+
|
|
16
|
+
## Physical Analog
|
|
17
|
+
**Reference devices**: Graphic equalizer displays (Pioneer, Kenwood car stereos), Winamp visualization, broadcast spectrum analyzers.
|
|
18
|
+
**Mechanism**: LED bar graph array. Each bar is a vertical column of LEDs (8-16 per column, 4-16 columns). Column height represents amplitude of a frequency band. LEDs light bottom-to-top. Green-to-red gradient via different colored LEDs at different heights.
|
|
19
|
+
|
|
20
|
+
## Geometry
|
|
21
|
+
|
|
22
|
+
| Property | Value |
|
|
23
|
+
|----------|-------|
|
|
24
|
+
| Container height | 100px |
|
|
25
|
+
| Bar width | 16px |
|
|
26
|
+
| Bar gap | 6px |
|
|
27
|
+
| Bar radius | 3px top corners |
|
|
28
|
+
|
|
29
|
+
## CSS Recipe
|
|
30
|
+
|
|
31
|
+
### Container
|
|
32
|
+
```css
|
|
33
|
+
.signal-meter { display: flex; align-items: flex-end; gap: 6px; height: 100px; }
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Individual Bar
|
|
37
|
+
```css
|
|
38
|
+
.signal-bar {
|
|
39
|
+
width: 16px; border-radius: 3px 3px 0 0;
|
|
40
|
+
background: linear-gradient(180deg, var(--green-hi), var(--green-on));
|
|
41
|
+
box-shadow: 0 0 8px rgba(102,255,102,0.15);
|
|
42
|
+
animation: fluctuate 2s infinite ease-in-out;
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Fluctuation Animation
|
|
47
|
+
```css
|
|
48
|
+
@keyframes fluctuate { 0%,100%{filter:brightness(1)} 50%{filter:brightness(1.25)} }
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## HTML Structure
|
|
52
|
+
```html
|
|
53
|
+
<div class="signal-meter">
|
|
54
|
+
<div class="signal-bar" style="height:28%"></div>
|
|
55
|
+
<div class="signal-bar" style="height:55%"></div>
|
|
56
|
+
<div class="signal-bar" style="height:80%"></div>
|
|
57
|
+
<div class="signal-bar" style="height:42%"></div>
|
|
58
|
+
<div class="signal-bar" style="height:64%"></div>
|
|
59
|
+
<div class="signal-bar" style="height:35%"></div>
|
|
60
|
+
<div class="signal-bar" style="height:72%"></div>
|
|
61
|
+
<div class="signal-bar" style="height:50%"></div>
|
|
62
|
+
</div>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Size Variants
|
|
66
|
+
No explicit size variants. Heights set per bar via inline style.
|
|
67
|
+
|
|
68
|
+
## Material Variants
|
|
69
|
+
Single material: LED bars with green gradient and glow.
|
|
70
|
+
|
|
71
|
+
## Theme Behavior
|
|
72
|
+
- LED colors and glow are fixed (LEDs emit their own light)
|
|
73
|
+
- Container has no background (transparent)
|
|
74
|
+
|
|
75
|
+
## Constraints
|
|
76
|
+
1. Bars MUST align to bottom (`align-items: flex-end`).
|
|
77
|
+
2. Bar heights are set individually per bar via inline `style`.
|
|
78
|
+
3. `fluctuate` animation simulates continuous signal variation.
|
|
79
|
+
4. Border-radius only on top corners (bars grow from bottom).
|
|
80
|
+
5. Subtle glow (`0 0 8px rgba(102,255,102,0.15)`) simulates LED light spill.
|
|
81
|
+
|
|
82
|
+
## Accessibility
|
|
83
|
+
- Decorative visualization; use `aria-hidden="true"` if purely decorative
|
|
84
|
+
- If informational, use `role="img"` with `aria-label` describing the signal levels
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: VU Meter
|
|
3
|
+
id: vu-meter
|
|
4
|
+
class: .vu-meter
|
|
5
|
+
category: meters
|
|
6
|
+
index: 3
|
|
7
|
+
materials: [phosphor-screen]
|
|
8
|
+
sizes: [md]
|
|
9
|
+
interactive: false
|
|
10
|
+
requires_js: false
|
|
11
|
+
canvas: false
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# VU Meter
|
|
15
|
+
|
|
16
|
+
## Physical Analog
|
|
17
|
+
**Reference devices**: Tascam 424 cassette portastudio, Mackie mixer channel meters, Yamaha mixer LED meters.
|
|
18
|
+
**Mechanism**: Volume Unit meter displaying audio signal level. Standardized ballistic response (300ms integration time) representing perceived loudness. Green-to-amber-to-red gradient: green = safe, amber = approaching 0dBVU, red = clipping.
|
|
19
|
+
|
|
20
|
+
## Geometry
|
|
21
|
+
|
|
22
|
+
| Property | Value |
|
|
23
|
+
|----------|-------|
|
|
24
|
+
| Container height | 80px |
|
|
25
|
+
| Bar width | 12px |
|
|
26
|
+
| Bar gap | 4px |
|
|
27
|
+
| Bar gradient | Red top, amber middle, green bottom |
|
|
28
|
+
|
|
29
|
+
## CSS Recipe
|
|
30
|
+
|
|
31
|
+
### Wrapper
|
|
32
|
+
```css
|
|
33
|
+
.vu-wrap { display: flex; flex-direction: column; align-items: center; gap: 6px; }
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Container
|
|
37
|
+
```css
|
|
38
|
+
.vu-meter { display: flex; align-items: flex-end; gap: 4px; height: 80px; }
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Bar
|
|
42
|
+
```css
|
|
43
|
+
.vu-bar {
|
|
44
|
+
width: 12px; border-radius: 2px 2px 0 0;
|
|
45
|
+
background: linear-gradient(180deg, #ff4444, #ffaa00 50%, #44cc66);
|
|
46
|
+
min-height: 4px;
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Label
|
|
51
|
+
```css
|
|
52
|
+
.vu-label { font-family: var(--font-ui); font-size: 8px; font-weight: 500; letter-spacing: 2px; color: var(--text-muted); }
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## HTML Structure
|
|
56
|
+
```html
|
|
57
|
+
<div class="vu-wrap">
|
|
58
|
+
<div class="vu-meter">
|
|
59
|
+
<div class="vu-bar" style="height:55%"></div>
|
|
60
|
+
<div class="vu-bar" style="height:75%"></div>
|
|
61
|
+
<div class="vu-bar" style="height:90%"></div>
|
|
62
|
+
<div class="vu-bar" style="height:60%"></div>
|
|
63
|
+
<div class="vu-bar" style="height:40%"></div>
|
|
64
|
+
<div class="vu-bar" style="height:70%"></div>
|
|
65
|
+
</div>
|
|
66
|
+
<span class="vu-label">L CHANNEL</span>
|
|
67
|
+
</div>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Size Variants
|
|
71
|
+
No explicit size variants.
|
|
72
|
+
|
|
73
|
+
## Material Variants
|
|
74
|
+
Single gradient bar style. The tri-color gradient automatically shows correct color at any height.
|
|
75
|
+
|
|
76
|
+
## Theme Behavior
|
|
77
|
+
- Bar gradient colors are fixed (LED colors)
|
|
78
|
+
- Label adapts via `--text-muted`
|
|
79
|
+
|
|
80
|
+
## Constraints
|
|
81
|
+
1. Bar gradient MUST be `linear-gradient(180deg, #ff4444, #ffaa00 50%, #44cc66)` -- single gradient per bar automatically creates correct color at any height.
|
|
82
|
+
2. Bars align to bottom (`flex-end`).
|
|
83
|
+
3. Minimum height of 4px ensures bars are always visible.
|
|
84
|
+
4. Border-radius only on top corners.
|
|
85
|
+
|
|
86
|
+
## Accessibility
|
|
87
|
+
- Use `role="img"` with `aria-label` describing the levels
|
|
88
|
+
- Or `aria-hidden="true"` if paired with numeric readout
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Waveform
|
|
3
|
+
id: waveform-wrap
|
|
4
|
+
class: .waveform-wrap
|
|
5
|
+
category: meters
|
|
6
|
+
index: 6
|
|
7
|
+
materials: [phosphor-screen]
|
|
8
|
+
sizes: [md]
|
|
9
|
+
interactive: false
|
|
10
|
+
requires_js: true
|
|
11
|
+
canvas: true
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Waveform
|
|
15
|
+
|
|
16
|
+
## Physical Analog
|
|
17
|
+
**Reference devices**: Final Cut Pro waveform monitor, DaVinci Resolve parade scope, broadcast waveform monitors.
|
|
18
|
+
**Mechanism**: Shows brightness value for each horizontal position in image. Y-axis = luma level (0-100 IRE). Used in broadcast to ensure legal signal levels.
|
|
19
|
+
|
|
20
|
+
## Geometry
|
|
21
|
+
|
|
22
|
+
| Property | Value |
|
|
23
|
+
|----------|-------|
|
|
24
|
+
| Canvas | 200x80px |
|
|
25
|
+
| Container padding | 2px |
|
|
26
|
+
| Border-radius | var(--radius-sm) |
|
|
27
|
+
|
|
28
|
+
## CSS Recipe
|
|
29
|
+
|
|
30
|
+
### Container
|
|
31
|
+
```css
|
|
32
|
+
.waveform-wrap {
|
|
33
|
+
background: #0a0a0a; border: 1px solid #1e1e1e;
|
|
34
|
+
border-radius: var(--radius-sm); padding: 2px;
|
|
35
|
+
box-shadow: inset 0 1px 4px rgba(0,0,0,0.6);
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Canvas
|
|
40
|
+
```css
|
|
41
|
+
.waveform-canvas { display: block; border-radius: 2px; }
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## HTML Structure
|
|
45
|
+
```html
|
|
46
|
+
<div class="waveform-wrap">
|
|
47
|
+
<canvas class="waveform-canvas" width="200" height="80" id="waveCanvas"></canvas>
|
|
48
|
+
</div>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Size Variants
|
|
52
|
+
No explicit size variants.
|
|
53
|
+
|
|
54
|
+
## Material Variants
|
|
55
|
+
Single material: Phosphor screen.
|
|
56
|
+
|
|
57
|
+
## Theme Behavior
|
|
58
|
+
- Container uses hardcoded dark colors
|
|
59
|
+
- Canvas content rendered by JS
|
|
60
|
+
|
|
61
|
+
## Constraints
|
|
62
|
+
1. Canvas renders 200x80px audio waveform.
|
|
63
|
+
2. Single stroke path using compound sine waves (`sin(x*0.08)` + `sin(x*0.03)`) with random jitter.
|
|
64
|
+
3. Stroke color: `rgba(102,255,102,0.6)`, 1px line width.
|
|
65
|
+
4. Container MUST match histogram container styling.
|
|
66
|
+
5. Requires JS for canvas rendering.
|
|
67
|
+
|
|
68
|
+
## Accessibility
|
|
69
|
+
- Use `role="img"` on canvas with `aria-label`
|
|
70
|
+
- Provide text fallback for screen readers
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Breadcrumbs
|
|
3
|
+
id: breadcrumbs
|
|
4
|
+
class: .breadcrumbs
|
|
5
|
+
category: navigation
|
|
6
|
+
index: 7
|
|
7
|
+
materials: []
|
|
8
|
+
sizes: [default]
|
|
9
|
+
interactive: true
|
|
10
|
+
requires_js: false
|
|
11
|
+
canvas: false
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Breadcrumbs
|
|
15
|
+
|
|
16
|
+
## Physical Analog
|
|
17
|
+
**Reference devices**: Channel strip label chains on mixing desks.
|
|
18
|
+
**Mechanism**: Represents a navigation path -- derived from the channel routing labels on mixing console signal chains (INPUT -> PREAMP -> EQ -> COMP -> BUS). Each segment represents a level in the navigation hierarchy, with separators indicating signal flow direction.
|
|
19
|
+
|
|
20
|
+
## Geometry
|
|
21
|
+
|
|
22
|
+
| Property | Value |
|
|
23
|
+
|----------|-------|
|
|
24
|
+
| Gap | 6px |
|
|
25
|
+
| Font size | 10px |
|
|
26
|
+
| Separator font size | 8px |
|
|
27
|
+
| Letter spacing | 1px |
|
|
28
|
+
|
|
29
|
+
## CSS Recipe
|
|
30
|
+
|
|
31
|
+
### Container (`.breadcrumbs`)
|
|
32
|
+
```css
|
|
33
|
+
.breadcrumbs {
|
|
34
|
+
display: flex; align-items: center; gap: 6px;
|
|
35
|
+
font-family: var(--font-ui); font-size: 10px; font-weight: 500;
|
|
36
|
+
color: var(--text-muted); letter-spacing: 1px;
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Item (`.breadcrumb-item`)
|
|
41
|
+
```css
|
|
42
|
+
.breadcrumb-item { cursor: pointer; transition: color 0.12s; }
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Hover
|
|
46
|
+
```css
|
|
47
|
+
.breadcrumb-item:hover { color: var(--text-primary); }
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Active (current location)
|
|
51
|
+
```css
|
|
52
|
+
.breadcrumb-item.active { color: var(--amber); }
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Separator (`.breadcrumb-sep`)
|
|
56
|
+
```css
|
|
57
|
+
.breadcrumb-sep { color: var(--text-muted); opacity: 0.5; font-size: 8px; }
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## HTML Structure
|
|
61
|
+
```html
|
|
62
|
+
<div class="breadcrumbs">
|
|
63
|
+
<span class="breadcrumb-item">HOME</span>
|
|
64
|
+
<span class="breadcrumb-sep">▶</span>
|
|
65
|
+
<span class="breadcrumb-item">SETTINGS</span>
|
|
66
|
+
<span class="breadcrumb-sep">▶</span>
|
|
67
|
+
<span class="breadcrumb-item active">DISPLAY</span>
|
|
68
|
+
</div>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Size Variants
|
|
72
|
+
No size variants defined.
|
|
73
|
+
|
|
74
|
+
## Material Variants
|
|
75
|
+
No material variants. Text-only component.
|
|
76
|
+
|
|
77
|
+
## Theme Behavior
|
|
78
|
+
- Text colors swap via `--text-muted`, `--text-primary` tokens
|
|
79
|
+
- Active item always uses `--amber`
|
|
80
|
+
- Separator opacity remains constant
|
|
81
|
+
|
|
82
|
+
## Constraints
|
|
83
|
+
1. MUST use right-pointing triangle (▶) as separator to indicate signal flow direction
|
|
84
|
+
2. Separator MUST be at 50% opacity to maintain visual hierarchy
|
|
85
|
+
3. Current/active item MUST be amber colored
|
|
86
|
+
4. Previous items MUST be clickable (navigable)
|
|
87
|
+
5. MUST use uppercase text (mixing desk convention)
|
|
88
|
+
|
|
89
|
+
## Accessibility
|
|
90
|
+
- Container should have `role="navigation"` and `aria-label="Breadcrumb"`
|
|
91
|
+
- Use `<nav>` element as wrapper
|
|
92
|
+
- Use `<ol>` with `<li>` for semantic list structure
|
|
93
|
+
- Current item should have `aria-current="page"`
|
|
94
|
+
- Separators should be decorative (`aria-hidden="true"`)
|