@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,124 @@
1
+ ---
2
+ name: Rack Panel
3
+ id: rack-panel
4
+ class: .rack-panel
5
+ category: navigation
6
+ index: 6
7
+ materials: [brushed-metal]
8
+ sizes: [default]
9
+ interactive: true
10
+ requires_js: false
11
+ canvas: false
12
+ ---
13
+
14
+ # Rack Panel
15
+
16
+ ## Physical Analog
17
+ **Reference devices**: 19-inch rack-mount audio equipment front panels (Mackie, PreSonus, Behringer), modular synthesizer panels.
18
+ **Mechanism**: Derived from the 19-inch equipment rack standard (EIA-310). Audio, broadcast, and server equipment is mounted in standardized racks where each device occupies 1-4 "rack units" (1U = 1.75 inches / 44.45mm). The front panel of each device has controls and indicators arranged in a vertical strip. When multiple devices are stacked, they form a vertical sidebar of labeled modules.
19
+
20
+ ## Geometry
21
+
22
+ | Property | Value |
23
+ |----------|-------|
24
+ | Width | 200px |
25
+ | Border radius | `--radius-lg` (14px) |
26
+ | Slot padding | 10px 14px |
27
+ | Indicator width | 4px |
28
+ | Indicator height | 20px |
29
+ | Font size | 10px |
30
+
31
+ ## CSS Recipe
32
+
33
+ ### Container (`.rack-panel`)
34
+ ```css
35
+ .rack-panel {
36
+ width: 200px; background: var(--bg-raised);
37
+ border: 1px solid var(--border-subtle); border-radius: var(--radius-lg);
38
+ box-shadow: var(--shadow-deep); overflow: hidden;
39
+ }
40
+ ```
41
+
42
+ ### Slot (`.rack-slot`)
43
+ ```css
44
+ .rack-slot {
45
+ padding: 10px 14px; border-bottom: 1px solid var(--border-subtle);
46
+ cursor: pointer; transition: background 0.12s;
47
+ display: flex; align-items: center; gap: 8px;
48
+ }
49
+ .rack-slot:last-child { border-bottom: none; }
50
+ ```
51
+
52
+ ### Hover
53
+ ```css
54
+ .rack-slot:hover { background: var(--glow-color); }
55
+ ```
56
+
57
+ ### Active
58
+ ```css
59
+ .rack-slot.active { background: var(--glow-color); }
60
+ ```
61
+
62
+ ### Indicator (`.rack-slot-indicator`)
63
+ ```css
64
+ .rack-slot-indicator { width: 4px; height: 20px; border-radius: 2px; background: var(--border-mid); flex-shrink: 0; }
65
+ .rack-slot.active .rack-slot-indicator { background: var(--amber); box-shadow: 0 0 6px var(--amber-glow); }
66
+ ```
67
+
68
+ ### Label (`.rack-slot-label`)
69
+ ```css
70
+ .rack-slot-label { font-family: var(--font-ui); font-size: 10px; font-weight: 500; color: var(--text-secondary); letter-spacing: 1px; }
71
+ .rack-slot.active .rack-slot-label { color: var(--amber); }
72
+ ```
73
+
74
+ ## HTML Structure
75
+ ```html
76
+ <div class="rack-panel">
77
+ <div class="rack-slot active">
78
+ <div class="rack-slot-indicator"></div>
79
+ <span class="rack-slot-label">CHANNEL 1</span>
80
+ </div>
81
+ <div class="rack-slot">
82
+ <div class="rack-slot-indicator"></div>
83
+ <span class="rack-slot-label">CHANNEL 2</span>
84
+ </div>
85
+ <div class="rack-slot">
86
+ <div class="rack-slot-indicator"></div>
87
+ <span class="rack-slot-label">CHANNEL 3</span>
88
+ </div>
89
+ <div class="rack-slot">
90
+ <div class="rack-slot-indicator"></div>
91
+ <span class="rack-slot-label">AUX SEND</span>
92
+ </div>
93
+ <div class="rack-slot">
94
+ <div class="rack-slot-indicator"></div>
95
+ <span class="rack-slot-label">MASTER</span>
96
+ </div>
97
+ </div>
98
+ ```
99
+
100
+ ## Size Variants
101
+ No size variants defined.
102
+
103
+ ## Material Variants
104
+ No material variants. Uses standard raised surface with deep shadow.
105
+
106
+ ## Theme Behavior
107
+ - Background swaps via `--bg-raised` token
108
+ - Active indicator always uses `--amber` with amber glow
109
+ - Inactive indicator uses `--border-mid` (adapts to theme)
110
+ - Label color swaps between `--text-secondary` (inactive) and `--amber` (active)
111
+
112
+ ## Constraints
113
+ 1. MUST include 4px vertical LED indicator on left edge of each slot
114
+ 2. Active channel indicator MUST glow amber (`0 0 6px var(--amber-glow)`)
115
+ 3. Inactive indicators MUST show as dim lines (`--border-mid`), not hidden
116
+ 4. Slots MUST be separated by `--border-subtle` bottom borders
117
+ 5. MUST use fixed 200px width (rack module standard proportion)
118
+ 6. MUST NOT use horizontal scroll -- content is vertical-only
119
+
120
+ ## Accessibility
121
+ - Container should have `role="navigation"` or `role="tablist"` with `aria-orientation="vertical"`
122
+ - Slots should have `role="tab"` or be `<button>` elements
123
+ - Active slot: `aria-selected="true"` or `aria-current="true"`
124
+ - Support Up/Down arrow key navigation
@@ -0,0 +1,97 @@
1
+ ---
2
+ name: Custom Scrollbar
3
+ id: scrollbar
4
+ class: .custom-scrollbar-demo
5
+ category: navigation
6
+ index: 10
7
+ materials: []
8
+ sizes: [default]
9
+ interactive: true
10
+ requires_js: false
11
+ canvas: false
12
+ ---
13
+
14
+ # Custom Scrollbar
15
+
16
+ ## Physical Analog
17
+ **Reference devices**: Any scrollable display on equipment with limited real estate -- function lists on synthesizers, parameter pages on digital mixing consoles.
18
+ **Mechanism**: The scrollbar thumb represents the viewport's position within the total content, proportional to the ratio of visible content to total content. Derived from mechanical scroll mechanisms on typewriters and early plotters.
19
+
20
+ ## Geometry
21
+
22
+ | Property | Value |
23
+ |----------|-------|
24
+ | Container width | 180px |
25
+ | Container height | 120px |
26
+ | Scrollbar width | 8px |
27
+ | Thumb border-radius | 4px |
28
+ | Track border-radius | 4px |
29
+ | Thumb border | 1px solid `--bg-inset` |
30
+
31
+ ## CSS Recipe
32
+
33
+ ### Container (`.custom-scrollbar-demo`)
34
+ ```css
35
+ .custom-scrollbar-demo {
36
+ width: 180px; height: 120px; overflow-y: auto;
37
+ background: var(--bg-inset); border: 1px solid var(--border-subtle);
38
+ border-radius: var(--radius-md); padding: 10px;
39
+ font-family: var(--font-ui); font-size: 10px; color: var(--text-secondary);
40
+ line-height: 1.8;
41
+ }
42
+ ```
43
+
44
+ ### Scrollbar track
45
+ ```css
46
+ .custom-scrollbar-demo::-webkit-scrollbar { width: 8px; }
47
+ .custom-scrollbar-demo::-webkit-scrollbar-track { background: var(--bg-inset); border-radius: 4px; }
48
+ ```
49
+
50
+ ### Scrollbar thumb
51
+ ```css
52
+ .custom-scrollbar-demo::-webkit-scrollbar-thumb {
53
+ background: var(--border-mid); border-radius: 4px;
54
+ border: 1px solid var(--bg-inset);
55
+ }
56
+ ```
57
+
58
+ ### Thumb hover
59
+ ```css
60
+ .custom-scrollbar-demo::-webkit-scrollbar-thumb:hover { background: var(--border-hi); }
61
+ ```
62
+
63
+ ## HTML Structure
64
+ ```html
65
+ <div class="custom-scrollbar-demo">
66
+ System log entries from diagnostic output. Channel 1 calibrated.
67
+ Channel 2 calibrated. Channel 3 online. Master bus active.
68
+ Signal routing complete. Buffer latency: 12ms. Sample rate: 48kHz.
69
+ Bit depth: 24-bit. Monitoring enabled. Output routed to main speakers.
70
+ </div>
71
+ ```
72
+
73
+ ## Size Variants
74
+ No size variants defined.
75
+
76
+ ## Material Variants
77
+ No material variants. Uses recessed inset styling.
78
+
79
+ ## Theme Behavior
80
+ - Container background uses `--bg-inset` (recessed area)
81
+ - Scrollbar thumb uses `--border-mid` (adapts to theme)
82
+ - Thumb hover uses `--border-hi` (brighter in both themes)
83
+ - Text color adapts via `--text-secondary`
84
+
85
+ ## Constraints
86
+ 1. MUST use 8px scrollbar width (narrow but usable)
87
+ 2. Thumb MUST have 1px border matching track background for inset effect
88
+ 3. Track MUST use recessed background (`--bg-inset`)
89
+ 4. MUST use WebKit scrollbar pseudo-elements (CSS-only, no JS needed)
90
+ 5. Thumb MUST brighten on hover via `--border-hi`
91
+ 6. MUST use 4px border-radius on both track and thumb
92
+
93
+ ## Accessibility
94
+ - Scrollable content should have `tabindex="0"` for keyboard access
95
+ - Use `role="region"` with `aria-label` describing content area
96
+ - Ensure content is reachable via keyboard (Tab, then arrow keys)
97
+ - Consider `scrollbar-width: thin` for Firefox compatibility
@@ -0,0 +1,117 @@
1
+ ---
2
+ name: Status Bar
3
+ id: status-bar
4
+ class: .status-bar
5
+ category: navigation
6
+ index: 5
7
+ materials: [glossy-polycarbonate]
8
+ sizes: [default]
9
+ interactive: false
10
+ requires_js: false
11
+ canvas: false
12
+ ---
13
+
14
+ # Status Bar
15
+
16
+ ## Physical Analog
17
+ **Reference devices**: Nokia phone top status bar, iPod top bar, camera viewfinder top information strip.
18
+ **Mechanism**: The top status strip on every feature phone and camera viewfinder. Displays persistent system information: time, signal strength, battery level, recording status, GPS lock, etc. This bar is always visible regardless of the current app or screen. On physical devices, this data is often rendered by a dedicated display controller, separate from the main application processor.
19
+
20
+ ## Geometry
21
+
22
+ | Property | Value |
23
+ |----------|-------|
24
+ | Padding | 4px 10px |
25
+ | Min width | 200px |
26
+ | Border radius | `--radius-md` (8px) |
27
+ | Time font size | 13px |
28
+ | Status text font size | 9px |
29
+ | Icon gap | 6px |
30
+
31
+ ## CSS Recipe
32
+
33
+ ### Container (`.status-bar`)
34
+ ```css
35
+ .status-bar {
36
+ display: flex; align-items: center; gap: 8px;
37
+ padding: 4px 10px; background: var(--bg-raised);
38
+ border: 1px solid var(--border-subtle); border-radius: var(--radius-md);
39
+ min-width: 200px;
40
+ }
41
+ ```
42
+
43
+ ### Sub-elements
44
+ ```css
45
+ .sb-time { font-family: var(--font-mono); font-size: 13px; color: var(--text-primary); letter-spacing: 1px; }
46
+ .sb-icons { display: flex; align-items: center; gap: 6px; margin-left: auto; }
47
+ .sb-text { font-family: var(--font-ui); font-size: 9px; font-weight: 500; color: var(--text-muted); }
48
+ ```
49
+
50
+ ### Signal bars (used within status bar)
51
+ ```css
52
+ .signal-bars { display: flex; align-items: flex-end; gap: 3px; height: 24px; }
53
+ .signal-strength-bar { width: 4px; border-radius: 1px; background: var(--green-on); transition: opacity 0.2s; }
54
+ .signal-strength-bar.off { opacity: 0.15; background: var(--text-muted); }
55
+ ```
56
+
57
+ ### Battery icon (used within status bar)
58
+ ```css
59
+ .battery-icon { display: inline-flex; align-items: center; gap: 2px; }
60
+ .battery-body {
61
+ width: 28px; height: 14px; border: 2px solid var(--border-mid);
62
+ border-radius: 3px; padding: 2px; position: relative;
63
+ }
64
+ .battery-body::after {
65
+ content: ''; position: absolute; right: -5px; top: 50%; transform: translateY(-50%);
66
+ width: 3px; height: 6px; background: var(--border-mid); border-radius: 0 1px 1px 0;
67
+ }
68
+ .battery-fill { height: 100%; border-radius: 1px; background: var(--green-on); transition: width 0.3s, background 0.3s; }
69
+ .battery-fill.medium { background: var(--amber); }
70
+ .battery-fill.low { background: var(--red-alert); }
71
+ ```
72
+
73
+ ## HTML Structure
74
+ ```html
75
+ <div class="status-bar">
76
+ <span class="sb-time">12:45</span>
77
+ <span class="sb-text">3G</span>
78
+ <div class="sb-icons">
79
+ <div class="signal-bars" style="height:14px">
80
+ <div class="signal-strength-bar" style="height:4px"></div>
81
+ <div class="signal-strength-bar" style="height:7px"></div>
82
+ <div class="signal-strength-bar" style="height:10px"></div>
83
+ <div class="signal-strength-bar off" style="height:13px"></div>
84
+ </div>
85
+ <div class="battery-icon">
86
+ <div class="battery-body" style="width:20px;height:10px">
87
+ <div class="battery-fill" style="width:70%"></div>
88
+ </div>
89
+ </div>
90
+ </div>
91
+ </div>
92
+ ```
93
+
94
+ ## Size Variants
95
+ No size variants defined.
96
+
97
+ ## Material Variants
98
+ No material variants. Uses standard raised surface.
99
+
100
+ ## Theme Behavior
101
+ - Background swaps via `--bg-raised` token
102
+ - Text colors swap via theme tokens
103
+ - Signal bars and battery use accent colors that remain constant across themes
104
+ - Border colors swap via `--border-subtle` and `--border-mid`
105
+
106
+ ## Constraints
107
+ 1. MUST use monospace font for time display (data readout convention)
108
+ 2. MUST use `margin-left: auto` on icons container to push icons to the right
109
+ 3. Signal bars MUST use `.off` class for inactive bars (not hidden)
110
+ 4. Battery fill color MUST change based on level: green (>50%), amber/`.medium` (20-50%), red/`.low` (<20%)
111
+ 5. MUST maintain minimum 200px width for readability
112
+
113
+ ## Accessibility
114
+ - Use `role="status"` or `aria-live="polite"` for dynamic values
115
+ - Signal strength should have `aria-label` describing level (e.g., "3 of 5 bars")
116
+ - Battery should have `aria-label` describing percentage
117
+ - Time should use `<time>` element when possible
@@ -0,0 +1,104 @@
1
+ ---
2
+ name: Tab Bar
3
+ id: tab-bar
4
+ class: .tab-bar
5
+ category: navigation
6
+ index: 3
7
+ materials: [glossy-polycarbonate]
8
+ sizes: [default]
9
+ interactive: true
10
+ requires_js: false
11
+ canvas: false
12
+ ---
13
+
14
+ # Tab Bar
15
+
16
+ ## Physical Analog
17
+ **Reference devices**: Nokia Symbian UI tabs, Sony Ericsson media player mode tabs, camera menu section tabs.
18
+ **Mechanism**: Derived from physical tabbed dividers in filing cabinets and ring binders. Each tab represents a category. The active tab appears "in front of" the others (connected to the content below), while inactive tabs appear recessed or separated. In hardware devices, this was often a row of physical buttons with a mode indicator LED above each.
19
+
20
+ ## Geometry
21
+
22
+ | Property | Value |
23
+ |----------|-------|
24
+ | Layout | Flex row, equal-width items (`flex: 1`) |
25
+ | Border radius | `--radius-md` (8px) |
26
+ | Item padding | 8px 14px |
27
+ | Font size | 10px |
28
+ | Active indicator height | 2px |
29
+ | Bottom shadow | 2px |
30
+
31
+ ## CSS Recipe
32
+
33
+ ### Container (`.tab-bar`)
34
+ ```css
35
+ .tab-bar {
36
+ display: flex; background: var(--bg-raised);
37
+ border: 1px solid var(--border-subtle); border-radius: var(--radius-md);
38
+ overflow: hidden; box-shadow: 0 2px 0 var(--border-deep);
39
+ }
40
+ ```
41
+
42
+ ### Tab Item (`.tab-item`)
43
+ ```css
44
+ .tab-item {
45
+ flex: 1; padding: 8px 14px; text-align: center;
46
+ font-family: var(--font-ui); font-size: 10px; font-weight: 500;
47
+ color: var(--text-muted); letter-spacing: 1px; cursor: pointer;
48
+ transition: all 0.15s; position: relative; user-select: none;
49
+ border-right: 1px solid var(--border-subtle); background: transparent;
50
+ border-top: none; border-bottom: none;
51
+ }
52
+ .tab-item:last-child { border-right: none; }
53
+ ```
54
+
55
+ ### Hover
56
+ ```css
57
+ .tab-item:hover { color: var(--text-primary); }
58
+ ```
59
+
60
+ ### Active
61
+ ```css
62
+ .tab-item.active { color: var(--blue-info); background: linear-gradient(180deg, var(--glow-color), transparent); }
63
+ .tab-item.active::after {
64
+ content: ''; position: absolute; bottom: 0; left: 4px; right: 4px;
65
+ height: 2px; background: var(--blue-info); border-radius: 1px;
66
+ }
67
+ ```
68
+
69
+ ## HTML Structure
70
+ ```html
71
+ <div class="tab-bar">
72
+ <button class="tab-item active">PHOTO</button>
73
+ <button class="tab-item">VIDEO</button>
74
+ <button class="tab-item">AUDIO</button>
75
+ <button class="tab-item">FILES</button>
76
+ </div>
77
+ ```
78
+
79
+ ## Size Variants
80
+ No size variants defined. Width is typically set by parent container.
81
+
82
+ ## Material Variants
83
+ No material variants. Uses standard raised surface.
84
+
85
+ ## Theme Behavior
86
+ - Background swaps via `--bg-raised` token
87
+ - Active indicator always uses `--blue-info`
88
+ - Separator borders swap via `--border-subtle`
89
+ - Bottom shadow adjusts via `--border-deep`
90
+
91
+ ## Constraints
92
+ 1. MUST use `flex: 1` on items so all tabs are equal width
93
+ 2. MUST include 2px blue indicator bar on active tab via `::after`
94
+ 3. MUST include vertical separators between tabs (`border-right`)
95
+ 4. Only ONE tab can be `.active` at a time (radio behavior)
96
+ 5. MUST use `overflow: hidden` on container to clip radius corners
97
+ 6. MUST NOT use more than 5-6 tabs (becomes unreadable)
98
+
99
+ ## Accessibility
100
+ - Container should have `role="tablist"`
101
+ - Each tab should be a `<button>` with `role="tab"`
102
+ - Active tab: `aria-selected="true"`
103
+ - Associated panel: `aria-controls="panel-id"` and `role="tabpanel"` on content
104
+ - Support Left/Right arrow key navigation
@@ -0,0 +1,94 @@
1
+ ---
2
+ name: Chassis Panel
3
+ id: chassis-panel
4
+ class: .chassis-panel
5
+ category: overlays
6
+ index: 2
7
+ materials: [brushed-metal]
8
+ sizes: [default]
9
+ interactive: false
10
+ requires_js: false
11
+ canvas: true
12
+ ---
13
+
14
+ # Chassis Panel
15
+
16
+ ## Physical Analog
17
+ **Reference devices**: Removable/swappable sections of device enclosures -- like a side panel on a PC case or a battery door on a camera.
18
+ **Mechanism**: The removable section of a device chassis. Lighter shadow than Panel (I1) because chassis panels are attached, not freestanding. Used for secondary grouping of controls and indicators.
19
+
20
+ ## Geometry
21
+
22
+ | Property | Value |
23
+ |----------|-------|
24
+ | Padding | 16px |
25
+ | Border radius | `--radius-lg` (14px) |
26
+ | Header padding-bottom | 8px |
27
+ | Title font size | 10px |
28
+
29
+ ## CSS Recipe
30
+
31
+ ### Container (`.chassis-panel`)
32
+ ```css
33
+ .chassis-panel {
34
+ background: linear-gradient(180deg, var(--bg-raised), var(--bg-surface));
35
+ border: 1px solid var(--border-subtle); border-radius: var(--radius-lg);
36
+ padding: 16px; box-shadow: var(--shadow-deep);
37
+ }
38
+ ```
39
+
40
+ ### Header (`.cpanel-header`)
41
+ ```css
42
+ .chassis-panel .cpanel-header {
43
+ display: flex; justify-content: space-between; align-items: center;
44
+ margin-bottom: 12px; padding-bottom: 8px;
45
+ border-bottom: 1px solid var(--border-subtle);
46
+ }
47
+ ```
48
+
49
+ ### Title (`.cpanel-title`)
50
+ ```css
51
+ .chassis-panel .cpanel-title {
52
+ font-family: var(--font-ui); font-size: 10px; font-weight: 600;
53
+ letter-spacing: 2px; color: var(--text-muted); text-transform: uppercase;
54
+ }
55
+ ```
56
+
57
+ ## HTML Structure
58
+ ```html
59
+ <div class="chassis-panel" style="width:200px">
60
+ <div class="cpanel-header">
61
+ <span class="cpanel-title">AUDIO OUT</span>
62
+ <span style="font-size:8px;color:var(--text-muted);font-family:var(--font-ui)">v2.1</span>
63
+ </div>
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
+ </div>
71
+ ```
72
+
73
+ ## Size Variants
74
+ No size variants defined.
75
+
76
+ ## Material Variants
77
+ No material variants. Uses raised-to-surface gradient (lighter than I1 Panel).
78
+
79
+ ## Theme Behavior
80
+ - Background gradient: `--bg-raised` to `--bg-surface` (adapts to theme)
81
+ - Shadow adapts via `--shadow-deep` token
82
+ - Border and header separator adapt via `--border-subtle`
83
+
84
+ ## Constraints
85
+ 1. MUST use lighter gradient than Panel (I1) -- `--bg-raised` to `--bg-surface` instead of `--bg-surface` to `--bg-panel`
86
+ 2. MUST use `--shadow-deep` (standard deep shadow, not custom Tier 3)
87
+ 3. Header MUST have bottom border separator
88
+ 4. Header MUST use flex with `justify-content: space-between` for title + version
89
+ 5. Title MUST be uppercase with 2px letter-spacing
90
+
91
+ ## Accessibility
92
+ - Use `role="region"` or `<section>` with `aria-label`
93
+ - Header should describe the panel's function
94
+ - Version info is supplementary (can use `aria-label` on the version span)
@@ -0,0 +1,83 @@
1
+ ---
2
+ name: Device Bezel
3
+ id: device-bezel
4
+ class: .device-bezel
5
+ category: overlays
6
+ index: 4
7
+ materials: [brushed-metal, glass]
8
+ sizes: [default]
9
+ interactive: false
10
+ requires_js: false
11
+ canvas: true
12
+ ---
13
+
14
+ # Device Bezel
15
+
16
+ ## Physical Analog
17
+ **Reference devices**: iPod face bezel, Game Boy front frame, Nokia phone screen bezel.
18
+ **Mechanism**: The frame surrounding a display or touch surface. The bezel is typically a plastic or metal frame that covers the gap between the display glass and the device chassis. The bezel protects the display edges and provides structural support. The double-border styling (outer solid border + inner glossy ring via `inset 0 0 0 1px glossy-hi`) represents the stepped profile of a real bezel: outer wall -> step down -> inner wall -> display surface.
19
+
20
+ ## Geometry
21
+
22
+ | Property | Value |
23
+ |----------|-------|
24
+ | Padding | 16px |
25
+ | Border | 2px solid |
26
+ | Border radius | `--radius-lg` (14px) |
27
+
28
+ ## CSS Recipe
29
+
30
+ ### Default (`.device-bezel`)
31
+ ```css
32
+ .device-bezel {
33
+ padding: 16px; border-radius: var(--radius-lg);
34
+ background: linear-gradient(180deg, var(--bg-raised), var(--bg-surface));
35
+ border: 2px solid var(--border-mid);
36
+ box-shadow: var(--shadow-deep), inset 0 0 0 1px var(--glossy-hi);
37
+ }
38
+ ```
39
+
40
+ ### Translucent variant (`.device-bezel.translucent`)
41
+ ```css
42
+ .device-bezel.translucent {
43
+ background: rgba(255,255,255,0.04); backdrop-filter: blur(8px);
44
+ border: 1px solid var(--border-subtle);
45
+ }
46
+ ```
47
+
48
+ ## HTML Structure
49
+ ```html
50
+ <div class="device-bezel" style="width:160px;height:100px;display:flex;align-items:center;justify-content:center">
51
+ <span style="font-family:var(--font-display);font-size:9px;color:var(--text-muted);letter-spacing:2px">DISPLAY AREA</span>
52
+ </div>
53
+ ```
54
+
55
+ ## Size Variants
56
+ No size variants defined. Dimensions set by content or parent.
57
+
58
+ ## Material Variants
59
+
60
+ | Variant | Class | Description |
61
+ |---------|-------|-------------|
62
+ | Default | `.device-bezel` | Opaque metal/plastic bezel with gradient |
63
+ | Translucent | `.device-bezel.translucent` | Frosted glass bezel with backdrop-filter |
64
+
65
+ ## Theme Behavior
66
+ - Background gradient adapts via theme tokens
67
+ - Border adapts via `--border-mid`
68
+ - Inner glossy ring adapts via `--glossy-hi`
69
+ - Shadow adapts via `--shadow-deep`
70
+ - Translucent variant uses fixed rgba values
71
+
72
+ ## Constraints
73
+ 1. MUST use 2px border (thicker than standard 1px to represent the physical bezel lip)
74
+ 2. MUST include inner glossy ring (`inset 0 0 0 1px glossy-hi`) for the stepped profile
75
+ 3. MUST use `--shadow-deep` for elevation
76
+ 4. MUST use `--radius-lg` for device-proportioned corner radius
77
+ 5. Translucent variant MUST use `backdrop-filter: blur(8px)` and semi-transparent background
78
+ 6. Translucent variant MUST reduce border to 1px and change to `--border-subtle`
79
+
80
+ ## Accessibility
81
+ - Use as a container element with `role="region"` or `<section>`
82
+ - Add `aria-label` describing the display area
83
+ - Content within the bezel should be independently accessible