@pudge-ui/mcp-server 0.1.0 → 0.2.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 +10 -0
- package/dist/tools.d.ts +25 -0
- package/dist/tools.js +23 -13
- package/package.json +5 -4
- package/spec/components/.gstack/browse.json.lock +1 -0
- package/spec/spec/components/_index.yaml +0 -822
- package/spec/spec/components/buttons/clear-button.md +0 -89
- package/spec/spec/components/buttons/fn-grid.md +0 -104
- package/spec/spec/components/buttons/gel-button.md +0 -125
- package/spec/spec/components/buttons/icon-button.md +0 -108
- package/spec/spec/components/buttons/keypad-button.md +0 -123
- package/spec/spec/components/buttons/push-button.md +0 -139
- package/spec/spec/components/buttons/rec-button.md +0 -105
- package/spec/spec/components/buttons/rubber-button.md +0 -100
- package/spec/spec/components/buttons/segmented-control.md +0 -95
- package/spec/spec/components/data/assembled-panel.md +0 -135
- package/spec/spec/components/data/data-table.md +0 -116
- package/spec/spec/components/data/film-strip.md +0 -110
- package/spec/spec/components/data/media-grid.md +0 -98
- package/spec/spec/components/dials/click-wheel.md +0 -115
- package/spec/spec/components/dials/cylindrical-horizontal.md +0 -130
- package/spec/spec/components/dials/cylindrical-scroll.md +0 -141
- package/spec/spec/components/dials/cylindrical-vertical.md +0 -100
- package/spec/spec/components/dials/mode-dial.md +0 -123
- package/spec/spec/components/dials/radial-knob.md +0 -150
- package/spec/spec/components/dials/rotary-encoder.md +0 -118
- package/spec/spec/components/forms/color-picker.md +0 -99
- package/spec/spec/components/forms/file-input.md +0 -105
- package/spec/spec/components/forms/search-bar.md +0 -96
- package/spec/spec/components/forms/select.md +0 -143
- package/spec/spec/components/forms/text-input.md +0 -114
- package/spec/spec/components/forms/textarea.md +0 -85
- package/spec/spec/components/indicators/accordion.md +0 -137
- package/spec/spec/components/indicators/badges.md +0 -87
- package/spec/spec/components/indicators/chips.md +0 -93
- package/spec/spec/components/indicators/led-dots.md +0 -103
- package/spec/spec/components/indicators/mode-badge.md +0 -97
- package/spec/spec/components/indicators/profile-badge.md +0 -99
- package/spec/spec/components/indicators/skeleton.md +0 -94
- package/spec/spec/components/indicators/spinners.md +0 -95
- package/spec/spec/components/indicators/status-chips.md +0 -85
- package/spec/spec/components/indicators/transport-controls.md +0 -114
- package/spec/spec/components/meters/battery-icon.md +0 -104
- package/spec/spec/components/meters/eq-bars.md +0 -93
- package/spec/spec/components/meters/ev-meter.md +0 -96
- package/spec/spec/components/meters/exposure-scale.md +0 -110
- package/spec/spec/components/meters/gauge-full.md +0 -102
- package/spec/spec/components/meters/gauge-semi.md +0 -113
- package/spec/spec/components/meters/histogram.md +0 -70
- package/spec/spec/components/meters/level-indicator.md +0 -95
- package/spec/spec/components/meters/oscilloscope.md +0 -83
- package/spec/spec/components/meters/progress-bar.md +0 -84
- package/spec/spec/components/meters/signal-bars.md +0 -80
- package/spec/spec/components/meters/signal-meter.md +0 -84
- package/spec/spec/components/meters/vu-meter.md +0 -88
- package/spec/spec/components/meters/waveform.md +0 -70
- package/spec/spec/components/navigation/breadcrumbs.md +0 -94
- package/spec/spec/components/navigation/context-menu.md +0 -94
- package/spec/spec/components/navigation/d-pad.md +0 -121
- package/spec/spec/components/navigation/drawer.md +0 -103
- package/spec/spec/components/navigation/menu-grid.md +0 -113
- package/spec/spec/components/navigation/menu-list.md +0 -134
- package/spec/spec/components/navigation/pagination.md +0 -100
- package/spec/spec/components/navigation/rack-panel.md +0 -124
- package/spec/spec/components/navigation/scrollbar.md +0 -97
- package/spec/spec/components/navigation/status-bar.md +0 -117
- package/spec/spec/components/navigation/tab-bar.md +0 -104
- package/spec/spec/components/overlays/chassis-panel.md +0 -94
- package/spec/spec/components/overlays/device-bezel.md +0 -83
- package/spec/spec/components/overlays/dialog.md +0 -100
- package/spec/spec/components/overlays/focus-brackets.md +0 -124
- package/spec/spec/components/overlays/grid-overlay.md +0 -93
- package/spec/spec/components/overlays/modal.md +0 -89
- package/spec/spec/components/overlays/panel.md +0 -114
- package/spec/spec/components/overlays/plastic-card.md +0 -92
- package/spec/spec/components/overlays/popover.md +0 -75
- package/spec/spec/components/overlays/toast.md +0 -93
- package/spec/spec/components/overlays/tooltip.md +0 -85
- package/spec/spec/components/readouts/camera-readout.md +0 -123
- package/spec/spec/components/readouts/dot-matrix.md +0 -88
- package/spec/spec/components/readouts/lcd-readout.md +0 -116
- package/spec/spec/components/readouts/resource-monitor.md +0 -98
- package/spec/spec/components/readouts/seven-segment.md +0 -110
- package/spec/spec/components/readouts/signal-display.md +0 -93
- package/spec/spec/components/readouts/timecode-display.md +0 -94
- package/spec/spec/components/sliders/crossfader.md +0 -102
- package/spec/spec/components/sliders/dual-range.md +0 -97
- package/spec/spec/components/sliders/range-fader.md +0 -100
- package/spec/spec/components/sliders/scrubber.md +0 -104
- package/spec/spec/components/sliders/stepper.md +0 -106
- package/spec/spec/components/sliders/vertical-fader.md +0 -116
- package/spec/spec/components/sliders/volume-slider.md +0 -107
- package/spec/spec/components/toggles/dip-switch.md +0 -100
- package/spec/spec/components/toggles/led-checkbox.md +0 -108
- package/spec/spec/components/toggles/power-toggle.md +0 -93
- package/spec/spec/components/toggles/radio-button.md +0 -106
- package/spec/spec/components/toggles/rocker-switch.md +0 -92
- package/spec/spec/components/toggles/slide-switch.md +0 -121
- package/spec/spec/components/toggles/toggle-switch.md +0 -135
- package/spec/spec/compositions/audio-mixer-strip.md +0 -62
- package/spec/spec/compositions/camera-viewfinder.md +0 -66
- package/spec/spec/compositions/phone-interface.md +0 -66
- package/spec/spec/foundation/accessibility.md +0 -33
- package/spec/spec/foundation/canvas.md +0 -20
- package/spec/spec/foundation/depth-model.md +0 -82
- package/spec/spec/foundation/layout.md +0 -33
- package/spec/spec/foundation/materials.md +0 -68
- package/spec/spec/foundation/naming.md +0 -33
- package/spec/spec/foundation/philosophy.md +0 -27
- package/spec/spec/foundation/theme.md +0 -39
- package/spec/spec/foundation/tokens.md +0 -148
- package/spec/spec/guides/extension.md +0 -189
- package/spec/spec/guides/for-llms.md +0 -129
- package/spec/spec/guides/prompt-templates.md +0 -143
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: LED Dots
|
|
3
|
-
id: led-dots
|
|
4
|
-
class: .led-dot
|
|
5
|
-
category: indicators
|
|
6
|
-
index: 4
|
|
7
|
-
materials: []
|
|
8
|
-
sizes: [default]
|
|
9
|
-
interactive: false
|
|
10
|
-
requires_js: false
|
|
11
|
-
canvas: false
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# LED Dots
|
|
15
|
-
|
|
16
|
-
## Physical Analog
|
|
17
|
-
**Reference devices**: Panel-mounted LED indicators on every piece of electronic equipment from this era.
|
|
18
|
-
**Mechanism**: A through-hole LED (Light Emitting Diode) mounted in a front-panel hole with a clear or diffused lens cap. Standard sizes were 3mm and 5mm diameter. The LED emits light in a specific color determined by the semiconductor material: red (GaAsP), green (GaP), blue (GaN), amber (AlGaInP). The `box-shadow` glow simulates the LED light illuminating the surrounding panel surface. The `.off` state shows the LED's dark body (visible but not illuminated) -- real unlit LEDs appear as a dark gray/brown disc.
|
|
19
|
-
|
|
20
|
-
## Geometry
|
|
21
|
-
|
|
22
|
-
| Property | Value |
|
|
23
|
-
|----------|-------|
|
|
24
|
-
| Size | 8x8px (default), 6x6px (in clusters) |
|
|
25
|
-
| Border radius | 50% (circular) |
|
|
26
|
-
| Glow radius | 6px |
|
|
27
|
-
|
|
28
|
-
## CSS Recipe
|
|
29
|
-
|
|
30
|
-
### Base (`.led-dot`)
|
|
31
|
-
```css
|
|
32
|
-
.led-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; vertical-align: middle; }
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
### Color variants
|
|
36
|
-
```css
|
|
37
|
-
.led-dot.green { background: var(--green-on); box-shadow: 0 0 6px var(--green-on); }
|
|
38
|
-
.led-dot.red { background: var(--red-alert); box-shadow: 0 0 6px var(--red-alert); }
|
|
39
|
-
.led-dot.blue { background: var(--blue-info); box-shadow: 0 0 6px var(--blue-info); }
|
|
40
|
-
.led-dot.amber { background: var(--amber); box-shadow: 0 0 6px var(--amber); }
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### Off state
|
|
44
|
-
```css
|
|
45
|
-
.led-dot.off { background: var(--text-muted); opacity: 0.3; box-shadow: none; }
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### LED Cluster container
|
|
49
|
-
```css
|
|
50
|
-
.led-cluster { display: flex; gap: 6px; padding: 6px 10px; background: var(--bg-inset); border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); }
|
|
51
|
-
.led-cluster .led-dot { width: 6px; height: 6px; }
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
## HTML Structure
|
|
55
|
-
```html
|
|
56
|
-
<!-- Individual LEDs -->
|
|
57
|
-
<div class="led-dot green"></div>
|
|
58
|
-
<div class="led-dot red"></div>
|
|
59
|
-
<div class="led-dot blue"></div>
|
|
60
|
-
<div class="led-dot amber"></div>
|
|
61
|
-
<div class="led-dot off"></div>
|
|
62
|
-
|
|
63
|
-
<!-- LED Cluster -->
|
|
64
|
-
<div class="led-cluster">
|
|
65
|
-
<div class="led-dot green"></div>
|
|
66
|
-
<div class="led-dot green"></div>
|
|
67
|
-
<div class="led-dot off"></div>
|
|
68
|
-
<div class="led-dot red"></div>
|
|
69
|
-
</div>
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## Size Variants
|
|
73
|
-
- Default: 8x8px
|
|
74
|
-
- In cluster: 6x6px (automatically smaller)
|
|
75
|
-
|
|
76
|
-
## Material Variants
|
|
77
|
-
|
|
78
|
-
| Variant | Class | Color | Glow |
|
|
79
|
-
|---------|-------|-------|------|
|
|
80
|
-
| Green | `.led-dot.green` | `--green-on` (#33cc66) | Same color, 6px |
|
|
81
|
-
| Red | `.led-dot.red` | `--red-alert` (#cc2200) | Same color, 6px |
|
|
82
|
-
| Blue | `.led-dot.blue` | `--blue-info` (#4477cc) | Same color, 6px |
|
|
83
|
-
| Amber | `.led-dot.amber` | `--amber` (#f5a623) | Same color, 6px |
|
|
84
|
-
| Off | `.led-dot.off` | `--text-muted` at 30% | None |
|
|
85
|
-
|
|
86
|
-
## Theme Behavior
|
|
87
|
-
- LED colors are constant across themes (accent colors don't change)
|
|
88
|
-
- Off state uses `--text-muted` which swaps between themes
|
|
89
|
-
- Glow effect remains constant (LEDs emit light regardless of ambient)
|
|
90
|
-
|
|
91
|
-
## Constraints
|
|
92
|
-
1. MUST be perfectly circular (border-radius: 50%)
|
|
93
|
-
2. Active LEDs MUST have matching-color glow at 6px radius
|
|
94
|
-
3. Off LEDs MUST be visible (30% opacity muted) -- not hidden
|
|
95
|
-
4. Off LEDs MUST NOT have glow (box-shadow: none)
|
|
96
|
-
5. Glow uses the LED color directly (not a glow token with reduced opacity)
|
|
97
|
-
6. MUST use `vertical-align: middle` for inline alignment with text
|
|
98
|
-
|
|
99
|
-
## Accessibility
|
|
100
|
-
- Include `aria-label` describing the LED state and meaning
|
|
101
|
-
- Example: `aria-label="Channel 1: active"` for a green LED
|
|
102
|
-
- Color alone must not be the only indicator -- provide context via adjacent labels
|
|
103
|
-
- Off LEDs should have `aria-label` indicating the off state
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Mode Badge
|
|
3
|
-
id: mode-badge
|
|
4
|
-
class: .mode-badge
|
|
5
|
-
category: indicators
|
|
6
|
-
index: 5
|
|
7
|
-
materials: [glossy-polycarbonate]
|
|
8
|
-
sizes: [default]
|
|
9
|
-
interactive: false
|
|
10
|
-
requires_js: false
|
|
11
|
-
canvas: false
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# Mode Badge
|
|
15
|
-
|
|
16
|
-
## Physical Analog
|
|
17
|
-
**Reference devices**: Camera top LCD mode indicator (M/A/S/P), Sony picture profile selector.
|
|
18
|
-
**Mechanism**: The large mode letter (M, A, S, P) is derived from the markings on the camera mode dial. When displayed as a badge rather than a dial position, it indicates the current setting in a status context.
|
|
19
|
-
|
|
20
|
-
## Geometry
|
|
21
|
-
|
|
22
|
-
| Property | Value |
|
|
23
|
-
|----------|-------|
|
|
24
|
-
| Padding | 6px 14px |
|
|
25
|
-
| Border radius | `--radius-md` (8px) |
|
|
26
|
-
| Mode letter font size | 28px |
|
|
27
|
-
| Mode key font size | 7px |
|
|
28
|
-
| Mode sub font size | 10px |
|
|
29
|
-
| Element gap | 6px |
|
|
30
|
-
|
|
31
|
-
## CSS Recipe
|
|
32
|
-
|
|
33
|
-
### Container (`.mode-badge`)
|
|
34
|
-
```css
|
|
35
|
-
.mode-badge {
|
|
36
|
-
display: inline-flex; align-items: center; gap: 6px;
|
|
37
|
-
background: var(--bg-panel); border: 1px solid var(--border-mid);
|
|
38
|
-
border-radius: var(--radius-md); padding: 6px 14px;
|
|
39
|
-
box-shadow: 0 2px 0 var(--border-deep), inset 0 1px 0 var(--border-hi);
|
|
40
|
-
}
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### Mode letter (`.mode-letter`)
|
|
44
|
-
```css
|
|
45
|
-
.mode-letter { font-family: var(--font-display); font-size: 28px; color: #fff; line-height: 1; }
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### Detail container (`.mode-detail`)
|
|
49
|
-
```css
|
|
50
|
-
.mode-detail { display: flex; flex-direction: column; gap: 2px; }
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
### Key label (`.mode-key`)
|
|
54
|
-
```css
|
|
55
|
-
.mode-key { font-size: 7px; letter-spacing: 2px; color: var(--text-muted); font-family: var(--font-ui); }
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### Sub label (`.mode-sub`)
|
|
59
|
-
```css
|
|
60
|
-
.mode-sub { font-size: 10px; color: var(--text-primary); letter-spacing: 1px; font-family: var(--font-ui); font-weight: 500; }
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## HTML Structure
|
|
64
|
-
```html
|
|
65
|
-
<div class="mode-badge">
|
|
66
|
-
<span class="mode-letter">M</span>
|
|
67
|
-
<div class="mode-detail">
|
|
68
|
-
<span class="mode-key">MODE</span>
|
|
69
|
-
<span class="mode-sub">Manual</span>
|
|
70
|
-
</div>
|
|
71
|
-
</div>
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
## Size Variants
|
|
75
|
-
No size variants defined.
|
|
76
|
-
|
|
77
|
-
## Material Variants
|
|
78
|
-
No material variants. Uses Tier 2 raised depth model.
|
|
79
|
-
|
|
80
|
-
## Theme Behavior
|
|
81
|
-
- Background swaps via `--bg-panel`
|
|
82
|
-
- Mode letter stays white (#fff) in both themes for high contrast
|
|
83
|
-
- Key label uses `--text-muted`, sub label uses `--text-primary`
|
|
84
|
-
- Shadow stack adapts via tokens
|
|
85
|
-
|
|
86
|
-
## Constraints
|
|
87
|
-
1. Mode letter MUST use `--font-display` (Michroma) at 28px
|
|
88
|
-
2. Mode letter MUST be white (#fff) for maximum contrast
|
|
89
|
-
3. MUST use Tier 2 shadow model (2px hard edge + inset highlight)
|
|
90
|
-
4. Key label MUST be 7px with 2px letter-spacing (micro label convention)
|
|
91
|
-
5. Layout MUST be horizontal (letter on left, detail column on right)
|
|
92
|
-
6. MUST NOT be interactive (display-only indicator)
|
|
93
|
-
|
|
94
|
-
## Accessibility
|
|
95
|
-
- Use `role="status"` for dynamic mode display
|
|
96
|
-
- Include full description: `aria-label="Mode: Manual (M)"`
|
|
97
|
-
- Ensure sufficient contrast for the 7px key label text
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Profile Badge
|
|
3
|
-
id: profile-badge
|
|
4
|
-
class: .pp-badge
|
|
5
|
-
category: indicators
|
|
6
|
-
index: 6
|
|
7
|
-
materials: [glossy-polycarbonate]
|
|
8
|
-
sizes: [default]
|
|
9
|
-
interactive: true
|
|
10
|
-
requires_js: true
|
|
11
|
-
canvas: false
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# Profile Badge
|
|
15
|
-
|
|
16
|
-
## Physical Analog
|
|
17
|
-
**Reference devices**: Sony cameras display the active picture profile (PP1-PP11, S-Log3, HLG) as a small rectangular indicator.
|
|
18
|
-
**Mechanism**: Compact key-value pair display. This component replicates the small rectangular indicator showing the active picture profile on Sony camera displays.
|
|
19
|
-
|
|
20
|
-
## Geometry
|
|
21
|
-
|
|
22
|
-
| Property | Value |
|
|
23
|
-
|----------|-------|
|
|
24
|
-
| Padding | 4px 10px |
|
|
25
|
-
| Border radius | `--radius-sm` (4px) |
|
|
26
|
-
| Key font size | 7px |
|
|
27
|
-
| Value font size | 12px |
|
|
28
|
-
| Gap | 1px |
|
|
29
|
-
|
|
30
|
-
## CSS Recipe
|
|
31
|
-
|
|
32
|
-
### Container (`.pp-badge`)
|
|
33
|
-
```css
|
|
34
|
-
.pp-badge {
|
|
35
|
-
display: inline-flex; flex-direction: column; align-items: center;
|
|
36
|
-
background: var(--bg-panel); border: 1px solid var(--border-mid);
|
|
37
|
-
border-radius: var(--radius-sm); padding: 4px 10px;
|
|
38
|
-
box-shadow: 0 2px 0 var(--border-deep), inset 0 1px 0 var(--border-hi);
|
|
39
|
-
gap: 1px; cursor: pointer; transition: background 0.1s;
|
|
40
|
-
}
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### Hover
|
|
44
|
-
```css
|
|
45
|
-
.pp-badge:hover { background: var(--bg-surface); }
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### Key label (`.pp-key`)
|
|
49
|
-
```css
|
|
50
|
-
.pp-key { font-size: 7px; letter-spacing: 2px; color: var(--text-muted); font-family: var(--font-ui); }
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
### Value (`.pp-val`)
|
|
54
|
-
```css
|
|
55
|
-
.pp-val { font-family: var(--font-mono); font-size: 12px; color: var(--text-primary); letter-spacing: 1px; }
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### Active state
|
|
59
|
-
```css
|
|
60
|
-
.pp-badge.active-pp .pp-val { color: var(--amber); }
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## HTML Structure
|
|
64
|
-
```html
|
|
65
|
-
<div class="pp-badge active-pp">
|
|
66
|
-
<span class="pp-key">PP</span>
|
|
67
|
-
<span class="pp-val">S-Log3</span>
|
|
68
|
-
</div>
|
|
69
|
-
<div class="pp-badge">
|
|
70
|
-
<span class="pp-key">PP</span>
|
|
71
|
-
<span class="pp-val">HLG</span>
|
|
72
|
-
</div>
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
## Size Variants
|
|
76
|
-
No size variants defined.
|
|
77
|
-
|
|
78
|
-
## Material Variants
|
|
79
|
-
No material variants. Uses Tier 2 raised depth model.
|
|
80
|
-
|
|
81
|
-
## Theme Behavior
|
|
82
|
-
- Background swaps via `--bg-panel`
|
|
83
|
-
- Hover background uses `--bg-surface`
|
|
84
|
-
- Active value uses `--amber` (constant across themes)
|
|
85
|
-
- Shadow stack adapts via tokens
|
|
86
|
-
|
|
87
|
-
## Constraints
|
|
88
|
-
1. Layout MUST be vertical column (key above, value below)
|
|
89
|
-
2. MUST use `--radius-sm` (4px), smaller than mode badge
|
|
90
|
-
3. Key label MUST be 7px with 2px letter-spacing
|
|
91
|
-
4. Value MUST use monospace font (`--font-mono`) for data consistency
|
|
92
|
-
5. Active profile MUST highlight value in amber
|
|
93
|
-
6. MUST be interactive (cursor: pointer, hover state)
|
|
94
|
-
7. Gap between key and value MUST be minimal (1px)
|
|
95
|
-
|
|
96
|
-
## Accessibility
|
|
97
|
-
- Should have `role="radio"` if part of a selection group, or `role="button"` for standalone
|
|
98
|
-
- Active state: `aria-pressed="true"` or `aria-selected="true"`
|
|
99
|
-
- Include `aria-label` with full description: "Picture Profile: S-Log3 (active)"
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Skeleton Loading
|
|
3
|
-
id: skeleton
|
|
4
|
-
class: .skeleton-wrap
|
|
5
|
-
category: indicators
|
|
6
|
-
index: 8
|
|
7
|
-
materials: []
|
|
8
|
-
sizes: [default]
|
|
9
|
-
interactive: false
|
|
10
|
-
requires_js: false
|
|
11
|
-
canvas: false
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# Skeleton Loading
|
|
15
|
-
|
|
16
|
-
## Physical Analog
|
|
17
|
-
**Reference devices**: Device boot sequences (Palm, iPod, early smartphones showing "loading" bars during startup).
|
|
18
|
-
**Mechanism**: Derived from the boot sequence of embedded devices. During startup, the device shows progressive loading indicators as each subsystem initializes. The pulsing animation (`skeletonPulse`) indicates active processing -- the system is working but content is not yet ready to display.
|
|
19
|
-
|
|
20
|
-
## Geometry
|
|
21
|
-
|
|
22
|
-
| Property | Value |
|
|
23
|
-
|----------|-------|
|
|
24
|
-
| Container width | 200px |
|
|
25
|
-
| Container padding | 16px |
|
|
26
|
-
| Line height | 8px (text lines), 28px (block) |
|
|
27
|
-
| Line border-radius | 4px |
|
|
28
|
-
| Line gap | 10px |
|
|
29
|
-
| Pulse animation | 1.5s |
|
|
30
|
-
| Lines 2 width | 70% |
|
|
31
|
-
| Lines 3 width | 50% |
|
|
32
|
-
|
|
33
|
-
## CSS Recipe
|
|
34
|
-
|
|
35
|
-
### Container (`.skeleton-wrap`)
|
|
36
|
-
```css
|
|
37
|
-
.skeleton-wrap {
|
|
38
|
-
width: 200px; padding: 16px; display: flex; flex-direction: column; gap: 10px;
|
|
39
|
-
background: var(--bg-inset); border: 1px solid var(--border-subtle);
|
|
40
|
-
border-radius: var(--radius-md);
|
|
41
|
-
}
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### Lines (`.skeleton-line`)
|
|
45
|
-
```css
|
|
46
|
-
.skeleton-line {
|
|
47
|
-
height: 8px; border-radius: 4px; background: var(--bg-surface);
|
|
48
|
-
animation: skeletonPulse 1.5s ease-in-out infinite;
|
|
49
|
-
}
|
|
50
|
-
.skeleton-line:nth-child(2) { width: 70%; }
|
|
51
|
-
.skeleton-line:nth-child(3) { width: 50%; }
|
|
52
|
-
.skeleton-line:nth-child(4) { height: 28px; }
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### Pulse animation
|
|
56
|
-
```css
|
|
57
|
-
@keyframes skeletonPulse { 0%,100%{opacity:0.4} 50%{opacity:0.8} }
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
## HTML Structure
|
|
61
|
-
```html
|
|
62
|
-
<div class="skeleton-wrap">
|
|
63
|
-
<div class="skeleton-line"></div>
|
|
64
|
-
<div class="skeleton-line"></div>
|
|
65
|
-
<div class="skeleton-line"></div>
|
|
66
|
-
<div class="skeleton-line"></div>
|
|
67
|
-
</div>
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
## Size Variants
|
|
71
|
-
No size variants defined.
|
|
72
|
-
|
|
73
|
-
## Material Variants
|
|
74
|
-
No material variants. Uses recessed inset container with surface-colored lines.
|
|
75
|
-
|
|
76
|
-
## Theme Behavior
|
|
77
|
-
- Container background uses `--bg-inset` (recessed)
|
|
78
|
-
- Lines use `--bg-surface` (slightly lighter than container)
|
|
79
|
-
- Both adapt automatically via theme tokens
|
|
80
|
-
- Pulse animation opacity range (0.4 to 0.8) is constant
|
|
81
|
-
|
|
82
|
-
## Constraints
|
|
83
|
-
1. MUST use pulsing opacity animation (0.4 to 0.8 at 1.5s cycle)
|
|
84
|
-
2. Lines MUST vary in width to simulate varied content (100%, 70%, 50%)
|
|
85
|
-
3. Last line SHOULD be taller (28px) to simulate a content block
|
|
86
|
-
4. Container MUST use recessed styling (`--bg-inset`)
|
|
87
|
-
5. Lines MUST use 4px border-radius for rounded appearance
|
|
88
|
-
6. Gap between lines MUST be 10px
|
|
89
|
-
7. Animation MUST use `ease-in-out` for smooth breathing effect
|
|
90
|
-
|
|
91
|
-
## Accessibility
|
|
92
|
-
- Container should have `role="status"` and `aria-label="Content loading"`
|
|
93
|
-
- Or use `aria-busy="true"` on the parent content region
|
|
94
|
-
- Consider `prefers-reduced-motion` to reduce or stop the pulse animation
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Spinners
|
|
3
|
-
id: spinners
|
|
4
|
-
class: .spinner
|
|
5
|
-
category: indicators
|
|
6
|
-
index: 7
|
|
7
|
-
materials: [glossy-polycarbonate, chrome]
|
|
8
|
-
sizes: [default]
|
|
9
|
-
interactive: false
|
|
10
|
-
requires_js: false
|
|
11
|
-
canvas: false
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# Spinners
|
|
15
|
-
|
|
16
|
-
## Physical Analog
|
|
17
|
-
**Reference devices**: Loading indicators on iPod, "please wait" indicators on cameras during write operations.
|
|
18
|
-
**Mechanism**: Two variants. Ring spinner: a circular ring with one segment highlighted, rotating continuously (derived from the spinning hourglass/watch cursor). CD spinner: a disc that spins continuously, resembling a compact disc rotating in a player with center hole and disc texture.
|
|
19
|
-
|
|
20
|
-
## Geometry
|
|
21
|
-
|
|
22
|
-
| Property | Value |
|
|
23
|
-
|----------|-------|
|
|
24
|
-
| Ring spinner size | 32x32px |
|
|
25
|
-
| Ring border width | 3px |
|
|
26
|
-
| CD spinner size | 40x40px |
|
|
27
|
-
| CD border width | 2px |
|
|
28
|
-
| CD center hole | 6x6px |
|
|
29
|
-
| CD inner ring | 4px inset |
|
|
30
|
-
|
|
31
|
-
## CSS Recipe
|
|
32
|
-
|
|
33
|
-
### Ring Spinner (`.spinner`)
|
|
34
|
-
```css
|
|
35
|
-
.spinner { width: 32px; height: 32px; border-radius: 50%; border: 3px solid var(--border-subtle); border-top-color: var(--blue-info); animation: spin 0.8s linear infinite; }
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
### CD Spinner (`.cd-spinner`)
|
|
39
|
-
```css
|
|
40
|
-
.cd-spinner {
|
|
41
|
-
width: 40px; height: 40px; border-radius: 50%;
|
|
42
|
-
background: linear-gradient(135deg, var(--bg-surface), var(--bg-panel));
|
|
43
|
-
border: 2px solid var(--border-mid); position: relative;
|
|
44
|
-
animation: spin 3s linear infinite;
|
|
45
|
-
box-shadow: inset 0 0 0 4px var(--bg-inset);
|
|
46
|
-
}
|
|
47
|
-
.cd-spinner::after {
|
|
48
|
-
content: ''; position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%);
|
|
49
|
-
width: 6px; height: 6px; border-radius: 50%; background: var(--text-muted);
|
|
50
|
-
}
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
### Spin animation
|
|
54
|
-
```css
|
|
55
|
-
@keyframes spin { to{transform:rotate(360deg)} }
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
## HTML Structure
|
|
59
|
-
```html
|
|
60
|
-
<!-- Ring spinner -->
|
|
61
|
-
<div class="spinner"></div>
|
|
62
|
-
|
|
63
|
-
<!-- CD spinner -->
|
|
64
|
-
<div class="cd-spinner"></div>
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
## Size Variants
|
|
68
|
-
No size variants defined.
|
|
69
|
-
|
|
70
|
-
## Material Variants
|
|
71
|
-
|
|
72
|
-
| Variant | Class | Analog | Speed |
|
|
73
|
-
|---------|-------|--------|-------|
|
|
74
|
-
| Ring | `.spinner` | Digital loading cursor | 0.8s/revolution |
|
|
75
|
-
| CD | `.cd-spinner` | Compact disc in player | 3s/revolution |
|
|
76
|
-
|
|
77
|
-
## Theme Behavior
|
|
78
|
-
- Ring spinner: track uses `--border-subtle`, active segment uses `--blue-info`
|
|
79
|
-
- CD spinner: disc surface adapts via `--bg-surface`/`--bg-panel` gradient
|
|
80
|
-
- CD center hole uses `--bg-inset`
|
|
81
|
-
- Both animate continuously with CSS `@keyframes`
|
|
82
|
-
|
|
83
|
-
## Constraints
|
|
84
|
-
1. Ring spinner MUST rotate at 0.8s/revolution (fast, urgent indicator)
|
|
85
|
-
2. CD spinner MUST rotate at 3s/revolution (slow, leisurely like a real CD)
|
|
86
|
-
3. Ring spinner MUST use `border-top-color` for the active segment
|
|
87
|
-
4. CD spinner MUST include center hole via `::after` pseudo-element
|
|
88
|
-
5. CD spinner MUST include inner ring via `inset 0 0 0 4px` box-shadow
|
|
89
|
-
6. Both MUST use `animation: spin linear infinite` (constant speed, no easing)
|
|
90
|
-
7. MUST use circular shape (border-radius: 50%)
|
|
91
|
-
|
|
92
|
-
## Accessibility
|
|
93
|
-
- Include `role="status"` and `aria-label="Loading"`
|
|
94
|
-
- Or use `role="progressbar"` with `aria-busy="true"` for indeterminate loading
|
|
95
|
-
- Consider `prefers-reduced-motion` media query to pause or slow animations
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Status Chips
|
|
3
|
-
id: status-chips
|
|
4
|
-
class: .status-chip
|
|
5
|
-
category: indicators
|
|
6
|
-
index: 1
|
|
7
|
-
materials: [glossy-polycarbonate]
|
|
8
|
-
sizes: [default]
|
|
9
|
-
interactive: false
|
|
10
|
-
requires_js: false
|
|
11
|
-
canvas: false
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# Status Chips
|
|
15
|
-
|
|
16
|
-
## Physical Analog
|
|
17
|
-
**Reference devices**: Camera status indicators (REC, CONNECTED, GPS), iPod genre/playlist tags.
|
|
18
|
-
**Mechanism**: Small labeled indicator lights on equipment front panels. Status chips are read-only indicators -- they reflect system state (CONNECTED = amber border glow, STANDBY = dim). The pill shape with colored border comes from the physical form factor of panel-mounted indicator LEDs with silk-screened labels.
|
|
19
|
-
|
|
20
|
-
## Geometry
|
|
21
|
-
|
|
22
|
-
| Property | Value |
|
|
23
|
-
|----------|-------|
|
|
24
|
-
| Padding | 4px 10px |
|
|
25
|
-
| Border radius | `--radius-sm` (4px) |
|
|
26
|
-
| Font size | 9px |
|
|
27
|
-
| Letter spacing | 2px |
|
|
28
|
-
|
|
29
|
-
## CSS Recipe
|
|
30
|
-
|
|
31
|
-
### Default state
|
|
32
|
-
```css
|
|
33
|
-
.status-chip {
|
|
34
|
-
padding: 4px 10px; border-radius: var(--radius-sm);
|
|
35
|
-
font-family: var(--font-ui); font-size: 9px; font-weight: 500;
|
|
36
|
-
letter-spacing: 2px; background: var(--bg-panel);
|
|
37
|
-
border: 1px solid var(--border-mid); color: var(--text-muted);
|
|
38
|
-
transition: all 0.12s;
|
|
39
|
-
}
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
### Active state
|
|
43
|
-
```css
|
|
44
|
-
.status-chip.active { color: var(--amber); border-color: var(--amber-dim); box-shadow: 0 0 8px var(--amber-glow); }
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### Row container
|
|
48
|
-
```css
|
|
49
|
-
.chip-row { display: flex; flex-wrap: wrap; gap: 8px; }
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## HTML Structure
|
|
53
|
-
```html
|
|
54
|
-
<div class="chip-row">
|
|
55
|
-
<div class="status-chip active">CONNECTED</div>
|
|
56
|
-
<div class="status-chip">STANDBY</div>
|
|
57
|
-
<div class="status-chip active">REC</div>
|
|
58
|
-
<div class="status-chip">REMOTE</div>
|
|
59
|
-
</div>
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
## Size Variants
|
|
63
|
-
No size variants defined. Single small size.
|
|
64
|
-
|
|
65
|
-
## Material Variants
|
|
66
|
-
No material variants. Uses Tier 1 (flush) depth model.
|
|
67
|
-
|
|
68
|
-
## Theme Behavior
|
|
69
|
-
- Background swaps via `--bg-panel`
|
|
70
|
-
- Border swaps via `--border-mid`
|
|
71
|
-
- Inactive text uses `--text-muted`
|
|
72
|
-
- Active chip always uses amber with amber glow (constant across themes)
|
|
73
|
-
|
|
74
|
-
## Constraints
|
|
75
|
-
1. MUST be read-only (no interactive states like hover/click)
|
|
76
|
-
2. Active state MUST use amber color with amber-dim border AND amber glow shadow
|
|
77
|
-
3. Glow radius MUST be 8px (active indicator standard)
|
|
78
|
-
4. MUST use `--radius-sm` (4px), not pill shape (status chips are rectangular)
|
|
79
|
-
5. Letter spacing MUST be 2px (equipment label convention)
|
|
80
|
-
6. Font size MUST be 9px (small indicator label)
|
|
81
|
-
|
|
82
|
-
## Accessibility
|
|
83
|
-
- Use `role="status"` for dynamic status indicators
|
|
84
|
-
- Include `aria-label` with expanded status description if abbreviation is used
|
|
85
|
-
- Active/inactive state should be conveyed via `aria-current` or similar
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Transport Controls
|
|
3
|
-
id: transport-controls
|
|
4
|
-
class: .transport
|
|
5
|
-
category: indicators
|
|
6
|
-
index: 10
|
|
7
|
-
materials: [glossy-polycarbonate]
|
|
8
|
-
sizes: [default]
|
|
9
|
-
interactive: true
|
|
10
|
-
requires_js: true
|
|
11
|
-
canvas: false
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# Transport Controls
|
|
15
|
-
|
|
16
|
-
## Physical Analog
|
|
17
|
-
**Reference devices**: iPod transport bar, Sony Walkman controls, MiniDisc player controls, CD player front panel.
|
|
18
|
-
**Mechanism**: The tape/disc transport mechanism controls -- the most standardized icon set in consumer electronics. Skip backward, rewind, play, fast forward, skip forward. The play button is visually distinct (larger, blue background) because it is the primary transport action. On real devices, the play button often had a different color cap or a larger physical button.
|
|
19
|
-
|
|
20
|
-
## Geometry
|
|
21
|
-
|
|
22
|
-
| Property | Value |
|
|
23
|
-
|----------|-------|
|
|
24
|
-
| Button size | 32x32px (standard), 36x36px (play) |
|
|
25
|
-
| Button gap | 6px |
|
|
26
|
-
| Container padding | 4px |
|
|
27
|
-
| Container border-radius | `--radius-pill` (100px) |
|
|
28
|
-
| Bottom shadow | 2px |
|
|
29
|
-
| Icon font size | 12px (standard), 14px (play) |
|
|
30
|
-
|
|
31
|
-
## CSS Recipe
|
|
32
|
-
|
|
33
|
-
### Wrapper (`.transport-wrap`)
|
|
34
|
-
```css
|
|
35
|
-
.transport-wrap { display: flex; flex-direction: column; align-items: center; gap: 8px; }
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
### Container (`.transport`)
|
|
39
|
-
```css
|
|
40
|
-
.transport {
|
|
41
|
-
display: flex; align-items: center; gap: 6px;
|
|
42
|
-
background: var(--bg-raised); border: 1px solid var(--border-subtle);
|
|
43
|
-
border-radius: var(--radius-pill); padding: 4px;
|
|
44
|
-
box-shadow: 0 2px 0 var(--border-deep);
|
|
45
|
-
}
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### Standard button (`.transport-btn`)
|
|
49
|
-
```css
|
|
50
|
-
.transport-btn {
|
|
51
|
-
width: 32px; height: 32px; border-radius: 50%;
|
|
52
|
-
border: none; cursor: pointer; display: flex; align-items: center; justify-content: center;
|
|
53
|
-
background: linear-gradient(155deg, var(--bg-surface), var(--bg-panel));
|
|
54
|
-
box-shadow: 0 1px 2px rgba(0,0,0,0.2), inset 0 1px 0 var(--glossy-hi);
|
|
55
|
-
color: var(--text-primary); font-size: 12px;
|
|
56
|
-
transition: transform 0.07s var(--snap-fast);
|
|
57
|
-
}
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### Button press
|
|
61
|
-
```css
|
|
62
|
-
.transport-btn:active { transform: scale(0.92); box-shadow: 0 1px 0 rgba(0,0,0,0.2); }
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### Play button (`.transport-btn.play`)
|
|
66
|
-
```css
|
|
67
|
-
.transport-btn.play {
|
|
68
|
-
width: 36px; height: 36px;
|
|
69
|
-
background: linear-gradient(155deg, var(--blue-info), #335599);
|
|
70
|
-
color: #fff; font-size: 14px;
|
|
71
|
-
}
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
## HTML Structure
|
|
75
|
-
```html
|
|
76
|
-
<div class="transport-wrap">
|
|
77
|
-
<div class="transport">
|
|
78
|
-
<button class="transport-btn">⏮</button>
|
|
79
|
-
<button class="transport-btn">◀◀</button>
|
|
80
|
-
<button class="transport-btn play">▶</button>
|
|
81
|
-
<button class="transport-btn">▶▶</button>
|
|
82
|
-
<button class="transport-btn">⏭</button>
|
|
83
|
-
</div>
|
|
84
|
-
<span style="font-family:var(--font-ui);font-size:9px;font-weight:500;color:var(--text-muted);letter-spacing:1px">NOW PLAYING</span>
|
|
85
|
-
</div>
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## Size Variants
|
|
89
|
-
No size variants defined.
|
|
90
|
-
|
|
91
|
-
## Material Variants
|
|
92
|
-
- Standard buttons: glossy polycarbonate (surface-to-panel gradient with glossy highlight)
|
|
93
|
-
- Play button: blue polycarbonate (blue gradient)
|
|
94
|
-
|
|
95
|
-
## Theme Behavior
|
|
96
|
-
- Container background swaps via `--bg-raised`
|
|
97
|
-
- Button gradients swap via surface/panel tokens
|
|
98
|
-
- Play button always uses blue gradient (constant)
|
|
99
|
-
- Shadow depths adapt via tokens
|
|
100
|
-
|
|
101
|
-
## Constraints
|
|
102
|
-
1. Play button MUST be visually distinct: larger (36px vs 32px), blue background, white icon
|
|
103
|
-
2. All buttons MUST be circular (border-radius: 50%)
|
|
104
|
-
3. Press interaction MUST use `scale(0.92)` not translateY (round buttons scale, don't translate)
|
|
105
|
-
4. Container MUST use pill border-radius (capsule shape, like a Walkman transport bar)
|
|
106
|
-
5. Standard button order: skip-back, rewind, play, fast-forward, skip-forward
|
|
107
|
-
6. Icon set: ⏮ ◀◀ ▶ ▶▶ ⏭
|
|
108
|
-
7. MUST use `--snap-fast` easing for press animation (mechanical feel)
|
|
109
|
-
|
|
110
|
-
## Accessibility
|
|
111
|
-
- Each button should have `aria-label` describing the action ("Play", "Pause", "Skip forward", etc.)
|
|
112
|
-
- Play/Pause should toggle between states with updated label
|
|
113
|
-
- Support keyboard operation (Space/Enter to activate)
|
|
114
|
-
- Consider grouping with `role="toolbar"` and `aria-label="Media controls"`
|