@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.
Files changed (236) hide show
  1. package/README.md +63 -0
  2. package/dist/__tests__/catalog.test.d.ts +1 -0
  3. package/dist/__tests__/catalog.test.js +50 -0
  4. package/dist/__tests__/search.test.d.ts +1 -0
  5. package/dist/__tests__/search.test.js +44 -0
  6. package/dist/__tests__/validation.test.d.ts +1 -0
  7. package/dist/__tests__/validation.test.js +34 -0
  8. package/dist/assembler.d.ts +6 -0
  9. package/dist/assembler.js +95 -0
  10. package/dist/catalog.d.ts +22 -0
  11. package/dist/catalog.js +10 -0
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.js +33 -0
  14. package/dist/search.d.ts +5 -0
  15. package/dist/search.js +21 -0
  16. package/dist/tools.d.ts +105 -0
  17. package/dist/tools.js +129 -0
  18. package/package.json +55 -0
  19. package/spec/components/_index.yaml +822 -0
  20. package/spec/components/buttons/clear-button.md +89 -0
  21. package/spec/components/buttons/fn-grid.md +104 -0
  22. package/spec/components/buttons/gel-button.md +125 -0
  23. package/spec/components/buttons/icon-button.md +108 -0
  24. package/spec/components/buttons/keypad-button.md +123 -0
  25. package/spec/components/buttons/push-button.md +139 -0
  26. package/spec/components/buttons/rec-button.md +105 -0
  27. package/spec/components/buttons/rubber-button.md +100 -0
  28. package/spec/components/buttons/segmented-control.md +95 -0
  29. package/spec/components/data/assembled-panel.md +135 -0
  30. package/spec/components/data/data-table.md +116 -0
  31. package/spec/components/data/film-strip.md +110 -0
  32. package/spec/components/data/media-grid.md +98 -0
  33. package/spec/components/dials/click-wheel.md +115 -0
  34. package/spec/components/dials/cylindrical-horizontal.md +130 -0
  35. package/spec/components/dials/cylindrical-scroll.md +141 -0
  36. package/spec/components/dials/cylindrical-vertical.md +100 -0
  37. package/spec/components/dials/mode-dial.md +123 -0
  38. package/spec/components/dials/radial-knob.md +150 -0
  39. package/spec/components/dials/rotary-encoder.md +118 -0
  40. package/spec/components/forms/color-picker.md +99 -0
  41. package/spec/components/forms/file-input.md +105 -0
  42. package/spec/components/forms/search-bar.md +96 -0
  43. package/spec/components/forms/select.md +143 -0
  44. package/spec/components/forms/text-input.md +114 -0
  45. package/spec/components/forms/textarea.md +85 -0
  46. package/spec/components/indicators/accordion.md +137 -0
  47. package/spec/components/indicators/badges.md +87 -0
  48. package/spec/components/indicators/chips.md +93 -0
  49. package/spec/components/indicators/led-dots.md +103 -0
  50. package/spec/components/indicators/mode-badge.md +97 -0
  51. package/spec/components/indicators/profile-badge.md +99 -0
  52. package/spec/components/indicators/skeleton.md +94 -0
  53. package/spec/components/indicators/spinners.md +95 -0
  54. package/spec/components/indicators/status-chips.md +85 -0
  55. package/spec/components/indicators/transport-controls.md +114 -0
  56. package/spec/components/meters/battery-icon.md +104 -0
  57. package/spec/components/meters/eq-bars.md +93 -0
  58. package/spec/components/meters/ev-meter.md +96 -0
  59. package/spec/components/meters/exposure-scale.md +110 -0
  60. package/spec/components/meters/gauge-full.md +102 -0
  61. package/spec/components/meters/gauge-semi.md +113 -0
  62. package/spec/components/meters/histogram.md +70 -0
  63. package/spec/components/meters/level-indicator.md +95 -0
  64. package/spec/components/meters/oscilloscope.md +83 -0
  65. package/spec/components/meters/progress-bar.md +84 -0
  66. package/spec/components/meters/signal-bars.md +80 -0
  67. package/spec/components/meters/signal-meter.md +84 -0
  68. package/spec/components/meters/vu-meter.md +88 -0
  69. package/spec/components/meters/waveform.md +70 -0
  70. package/spec/components/navigation/breadcrumbs.md +94 -0
  71. package/spec/components/navigation/context-menu.md +94 -0
  72. package/spec/components/navigation/d-pad.md +121 -0
  73. package/spec/components/navigation/drawer.md +103 -0
  74. package/spec/components/navigation/menu-grid.md +113 -0
  75. package/spec/components/navigation/menu-list.md +134 -0
  76. package/spec/components/navigation/pagination.md +100 -0
  77. package/spec/components/navigation/rack-panel.md +124 -0
  78. package/spec/components/navigation/scrollbar.md +97 -0
  79. package/spec/components/navigation/status-bar.md +117 -0
  80. package/spec/components/navigation/tab-bar.md +104 -0
  81. package/spec/components/overlays/chassis-panel.md +94 -0
  82. package/spec/components/overlays/device-bezel.md +83 -0
  83. package/spec/components/overlays/dialog.md +100 -0
  84. package/spec/components/overlays/focus-brackets.md +124 -0
  85. package/spec/components/overlays/grid-overlay.md +93 -0
  86. package/spec/components/overlays/modal.md +89 -0
  87. package/spec/components/overlays/panel.md +114 -0
  88. package/spec/components/overlays/plastic-card.md +92 -0
  89. package/spec/components/overlays/popover.md +75 -0
  90. package/spec/components/overlays/toast.md +93 -0
  91. package/spec/components/overlays/tooltip.md +85 -0
  92. package/spec/components/readouts/camera-readout.md +123 -0
  93. package/spec/components/readouts/dot-matrix.md +88 -0
  94. package/spec/components/readouts/lcd-readout.md +116 -0
  95. package/spec/components/readouts/resource-monitor.md +98 -0
  96. package/spec/components/readouts/seven-segment.md +110 -0
  97. package/spec/components/readouts/signal-display.md +93 -0
  98. package/spec/components/readouts/timecode-display.md +94 -0
  99. package/spec/components/sliders/crossfader.md +102 -0
  100. package/spec/components/sliders/dual-range.md +97 -0
  101. package/spec/components/sliders/range-fader.md +100 -0
  102. package/spec/components/sliders/scrubber.md +104 -0
  103. package/spec/components/sliders/stepper.md +106 -0
  104. package/spec/components/sliders/vertical-fader.md +116 -0
  105. package/spec/components/sliders/volume-slider.md +107 -0
  106. package/spec/components/toggles/dip-switch.md +100 -0
  107. package/spec/components/toggles/led-checkbox.md +108 -0
  108. package/spec/components/toggles/power-toggle.md +93 -0
  109. package/spec/components/toggles/radio-button.md +106 -0
  110. package/spec/components/toggles/rocker-switch.md +92 -0
  111. package/spec/components/toggles/slide-switch.md +121 -0
  112. package/spec/components/toggles/toggle-switch.md +135 -0
  113. package/spec/compositions/audio-mixer-strip.md +62 -0
  114. package/spec/compositions/camera-viewfinder.md +66 -0
  115. package/spec/compositions/phone-interface.md +66 -0
  116. package/spec/foundation/accessibility.md +33 -0
  117. package/spec/foundation/canvas.md +20 -0
  118. package/spec/foundation/depth-model.md +82 -0
  119. package/spec/foundation/layout.md +33 -0
  120. package/spec/foundation/materials.md +68 -0
  121. package/spec/foundation/naming.md +33 -0
  122. package/spec/foundation/philosophy.md +27 -0
  123. package/spec/foundation/theme.md +39 -0
  124. package/spec/foundation/tokens.md +148 -0
  125. package/spec/guides/extension.md +189 -0
  126. package/spec/guides/for-llms.md +129 -0
  127. package/spec/guides/prompt-templates.md +143 -0
  128. package/spec/spec/components/_index.yaml +822 -0
  129. package/spec/spec/components/buttons/clear-button.md +89 -0
  130. package/spec/spec/components/buttons/fn-grid.md +104 -0
  131. package/spec/spec/components/buttons/gel-button.md +125 -0
  132. package/spec/spec/components/buttons/icon-button.md +108 -0
  133. package/spec/spec/components/buttons/keypad-button.md +123 -0
  134. package/spec/spec/components/buttons/push-button.md +139 -0
  135. package/spec/spec/components/buttons/rec-button.md +105 -0
  136. package/spec/spec/components/buttons/rubber-button.md +100 -0
  137. package/spec/spec/components/buttons/segmented-control.md +95 -0
  138. package/spec/spec/components/data/assembled-panel.md +135 -0
  139. package/spec/spec/components/data/data-table.md +116 -0
  140. package/spec/spec/components/data/film-strip.md +110 -0
  141. package/spec/spec/components/data/media-grid.md +98 -0
  142. package/spec/spec/components/dials/click-wheel.md +115 -0
  143. package/spec/spec/components/dials/cylindrical-horizontal.md +130 -0
  144. package/spec/spec/components/dials/cylindrical-scroll.md +141 -0
  145. package/spec/spec/components/dials/cylindrical-vertical.md +100 -0
  146. package/spec/spec/components/dials/mode-dial.md +123 -0
  147. package/spec/spec/components/dials/radial-knob.md +150 -0
  148. package/spec/spec/components/dials/rotary-encoder.md +118 -0
  149. package/spec/spec/components/forms/color-picker.md +99 -0
  150. package/spec/spec/components/forms/file-input.md +105 -0
  151. package/spec/spec/components/forms/search-bar.md +96 -0
  152. package/spec/spec/components/forms/select.md +143 -0
  153. package/spec/spec/components/forms/text-input.md +114 -0
  154. package/spec/spec/components/forms/textarea.md +85 -0
  155. package/spec/spec/components/indicators/accordion.md +137 -0
  156. package/spec/spec/components/indicators/badges.md +87 -0
  157. package/spec/spec/components/indicators/chips.md +93 -0
  158. package/spec/spec/components/indicators/led-dots.md +103 -0
  159. package/spec/spec/components/indicators/mode-badge.md +97 -0
  160. package/spec/spec/components/indicators/profile-badge.md +99 -0
  161. package/spec/spec/components/indicators/skeleton.md +94 -0
  162. package/spec/spec/components/indicators/spinners.md +95 -0
  163. package/spec/spec/components/indicators/status-chips.md +85 -0
  164. package/spec/spec/components/indicators/transport-controls.md +114 -0
  165. package/spec/spec/components/meters/battery-icon.md +104 -0
  166. package/spec/spec/components/meters/eq-bars.md +93 -0
  167. package/spec/spec/components/meters/ev-meter.md +96 -0
  168. package/spec/spec/components/meters/exposure-scale.md +110 -0
  169. package/spec/spec/components/meters/gauge-full.md +102 -0
  170. package/spec/spec/components/meters/gauge-semi.md +113 -0
  171. package/spec/spec/components/meters/histogram.md +70 -0
  172. package/spec/spec/components/meters/level-indicator.md +95 -0
  173. package/spec/spec/components/meters/oscilloscope.md +83 -0
  174. package/spec/spec/components/meters/progress-bar.md +84 -0
  175. package/spec/spec/components/meters/signal-bars.md +80 -0
  176. package/spec/spec/components/meters/signal-meter.md +84 -0
  177. package/spec/spec/components/meters/vu-meter.md +88 -0
  178. package/spec/spec/components/meters/waveform.md +70 -0
  179. package/spec/spec/components/navigation/breadcrumbs.md +94 -0
  180. package/spec/spec/components/navigation/context-menu.md +94 -0
  181. package/spec/spec/components/navigation/d-pad.md +121 -0
  182. package/spec/spec/components/navigation/drawer.md +103 -0
  183. package/spec/spec/components/navigation/menu-grid.md +113 -0
  184. package/spec/spec/components/navigation/menu-list.md +134 -0
  185. package/spec/spec/components/navigation/pagination.md +100 -0
  186. package/spec/spec/components/navigation/rack-panel.md +124 -0
  187. package/spec/spec/components/navigation/scrollbar.md +97 -0
  188. package/spec/spec/components/navigation/status-bar.md +117 -0
  189. package/spec/spec/components/navigation/tab-bar.md +104 -0
  190. package/spec/spec/components/overlays/chassis-panel.md +94 -0
  191. package/spec/spec/components/overlays/device-bezel.md +83 -0
  192. package/spec/spec/components/overlays/dialog.md +100 -0
  193. package/spec/spec/components/overlays/focus-brackets.md +124 -0
  194. package/spec/spec/components/overlays/grid-overlay.md +93 -0
  195. package/spec/spec/components/overlays/modal.md +89 -0
  196. package/spec/spec/components/overlays/panel.md +114 -0
  197. package/spec/spec/components/overlays/plastic-card.md +92 -0
  198. package/spec/spec/components/overlays/popover.md +75 -0
  199. package/spec/spec/components/overlays/toast.md +93 -0
  200. package/spec/spec/components/overlays/tooltip.md +85 -0
  201. package/spec/spec/components/readouts/camera-readout.md +123 -0
  202. package/spec/spec/components/readouts/dot-matrix.md +88 -0
  203. package/spec/spec/components/readouts/lcd-readout.md +116 -0
  204. package/spec/spec/components/readouts/resource-monitor.md +98 -0
  205. package/spec/spec/components/readouts/seven-segment.md +110 -0
  206. package/spec/spec/components/readouts/signal-display.md +93 -0
  207. package/spec/spec/components/readouts/timecode-display.md +94 -0
  208. package/spec/spec/components/sliders/crossfader.md +102 -0
  209. package/spec/spec/components/sliders/dual-range.md +97 -0
  210. package/spec/spec/components/sliders/range-fader.md +100 -0
  211. package/spec/spec/components/sliders/scrubber.md +104 -0
  212. package/spec/spec/components/sliders/stepper.md +106 -0
  213. package/spec/spec/components/sliders/vertical-fader.md +116 -0
  214. package/spec/spec/components/sliders/volume-slider.md +107 -0
  215. package/spec/spec/components/toggles/dip-switch.md +100 -0
  216. package/spec/spec/components/toggles/led-checkbox.md +108 -0
  217. package/spec/spec/components/toggles/power-toggle.md +93 -0
  218. package/spec/spec/components/toggles/radio-button.md +106 -0
  219. package/spec/spec/components/toggles/rocker-switch.md +92 -0
  220. package/spec/spec/components/toggles/slide-switch.md +121 -0
  221. package/spec/spec/components/toggles/toggle-switch.md +135 -0
  222. package/spec/spec/compositions/audio-mixer-strip.md +62 -0
  223. package/spec/spec/compositions/camera-viewfinder.md +66 -0
  224. package/spec/spec/compositions/phone-interface.md +66 -0
  225. package/spec/spec/foundation/accessibility.md +33 -0
  226. package/spec/spec/foundation/canvas.md +20 -0
  227. package/spec/spec/foundation/depth-model.md +82 -0
  228. package/spec/spec/foundation/layout.md +33 -0
  229. package/spec/spec/foundation/materials.md +68 -0
  230. package/spec/spec/foundation/naming.md +33 -0
  231. package/spec/spec/foundation/philosophy.md +27 -0
  232. package/spec/spec/foundation/theme.md +39 -0
  233. package/spec/spec/foundation/tokens.md +148 -0
  234. package/spec/spec/guides/extension.md +189 -0
  235. package/spec/spec/guides/for-llms.md +129 -0
  236. package/spec/spec/guides/prompt-templates.md +143 -0
@@ -0,0 +1,103 @@
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
@@ -0,0 +1,97 @@
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
@@ -0,0 +1,99 @@
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)"
@@ -0,0 +1,94 @@
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
@@ -0,0 +1,95 @@
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
@@ -0,0 +1,85 @@
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
@@ -0,0 +1,114 @@
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">&#9198;</button>
79
+ <button class="transport-btn">&#9664;&#9664;</button>
80
+ <button class="transport-btn play">&#9654;</button>
81
+ <button class="transport-btn">&#9654;&#9654;</button>
82
+ <button class="transport-btn">&#9197;</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: &#9198; &#9664;&#9664; &#9654; &#9654;&#9654; &#9197;
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"`