@vessel-dsp/control-ui 0.6.4 → 0.6.5

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 (75) hide show
  1. package/dist/ControlSurface.d.ts +2 -2
  2. package/dist/ControlSurface.d.ts.map +1 -1
  3. package/dist/ControlSurface.js +62 -31
  4. package/dist/ControlSurface.js.map +1 -1
  5. package/dist/appearance.d.ts +1 -1
  6. package/dist/appearance.d.ts.map +1 -1
  7. package/dist/appearance.js +20 -14
  8. package/dist/appearance.js.map +1 -1
  9. package/dist/components/ConcentricKnob.d.ts +22 -0
  10. package/dist/components/ConcentricKnob.d.ts.map +1 -0
  11. package/dist/components/ConcentricKnob.js +15 -0
  12. package/dist/components/ConcentricKnob.js.map +1 -0
  13. package/dist/components/ControlFrame.d.ts +3 -3
  14. package/dist/components/ControlFrame.d.ts.map +1 -1
  15. package/dist/components/ControlFrame.js +3 -3
  16. package/dist/components/ControlFrame.js.map +1 -1
  17. package/dist/components/DetentedRotarySelect.d.ts +2 -2
  18. package/dist/components/DetentedRotarySelect.d.ts.map +1 -1
  19. package/dist/components/DetentedRotarySelect.js +6 -6
  20. package/dist/components/DetentedRotarySelect.js.map +1 -1
  21. package/dist/components/FootswitchButton.d.ts +2 -2
  22. package/dist/components/FootswitchButton.d.ts.map +1 -1
  23. package/dist/components/FootswitchButton.js +7 -7
  24. package/dist/components/FootswitchButton.js.map +1 -1
  25. package/dist/components/JackIndicator.d.ts +15 -0
  26. package/dist/components/JackIndicator.d.ts.map +1 -0
  27. package/dist/components/JackIndicator.js +11 -0
  28. package/dist/components/JackIndicator.js.map +1 -0
  29. package/dist/components/KnobControl.d.ts +2 -2
  30. package/dist/components/KnobControl.d.ts.map +1 -1
  31. package/dist/components/KnobControl.js +42 -31
  32. package/dist/components/KnobControl.js.map +1 -1
  33. package/dist/components/LedIndicator.d.ts +2 -2
  34. package/dist/components/LedIndicator.d.ts.map +1 -1
  35. package/dist/components/LedIndicator.js +4 -4
  36. package/dist/components/LedIndicator.js.map +1 -1
  37. package/dist/components/SwitchSelectControl.d.ts +2 -2
  38. package/dist/components/SwitchSelectControl.d.ts.map +1 -1
  39. package/dist/components/SwitchSelectControl.js +3 -3
  40. package/dist/components/SwitchSelectControl.js.map +1 -1
  41. package/dist/components/ToggleSwitchControl.d.ts +2 -2
  42. package/dist/components/ToggleSwitchControl.d.ts.map +1 -1
  43. package/dist/components/ToggleSwitchControl.js +3 -3
  44. package/dist/components/ToggleSwitchControl.js.map +1 -1
  45. package/dist/controls.d.ts +2 -2
  46. package/dist/controls.d.ts.map +1 -1
  47. package/dist/controls.js +55 -37
  48. package/dist/controls.js.map +1 -1
  49. package/dist/index.d.ts +32 -28
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +17 -15
  52. package/dist/index.js.map +1 -1
  53. package/dist/render-plan.d.ts +2 -2
  54. package/dist/render-plan.d.ts.map +1 -1
  55. package/dist/render-plan.js +67 -10
  56. package/dist/render-plan.js.map +1 -1
  57. package/dist/state.d.ts +1 -1
  58. package/dist/state.d.ts.map +1 -1
  59. package/dist/state.js +7 -4
  60. package/dist/state.js.map +1 -1
  61. package/dist/styles.css +250 -203
  62. package/dist/theme.d.ts +3 -3
  63. package/dist/theme.d.ts.map +1 -1
  64. package/dist/theme.js +21 -11
  65. package/dist/theme.js.map +1 -1
  66. package/dist/types.d.ts +15 -6
  67. package/dist/types.d.ts.map +1 -1
  68. package/dist/useControlState.d.ts +1 -1
  69. package/dist/useControlState.d.ts.map +1 -1
  70. package/dist/useControlState.js +2 -2
  71. package/dist/useControlState.js.map +1 -1
  72. package/dist/utils.d.ts.map +1 -1
  73. package/dist/utils.js +3 -1
  74. package/dist/utils.js.map +1 -1
  75. package/package.json +70 -70
package/dist/styles.css CHANGED
@@ -1,333 +1,380 @@
1
1
  :where(.vdsp-control-ui-theme, .vdsp-control-ui-surface) {
2
- --vdsp-control-ui-accent-color: #f97316;
3
- --vdsp-control-ui-background-color: #f8fafc;
4
- --vdsp-control-ui-border-color: #94a3b8;
5
- --vdsp-control-ui-control-color: #111827;
6
- --vdsp-control-ui-text-color: #111827;
7
- --vdsp-control-ui-muted-text-color: #64748b;
8
- --vdsp-control-ui-focus-ring-color: #f59e0b;
9
- color: var(--vdsp-control-ui-text-color);
2
+ --vdsp-control-ui-accent-color: #f97316;
3
+ --vdsp-control-ui-background-color: #f8fafc;
4
+ --vdsp-control-ui-border-color: #94a3b8;
5
+ --vdsp-control-ui-control-color: #111827;
6
+ --vdsp-control-ui-text-color: #111827;
7
+ --vdsp-control-ui-muted-text-color: #64748b;
8
+ --vdsp-control-ui-focus-ring-color: #f59e0b;
9
+ color: var(--vdsp-control-ui-text-color);
10
10
  }
11
11
 
12
12
  .vdsp-control-ui-theme {
13
- display: contents;
13
+ display: contents;
14
14
  }
15
15
 
16
16
  .vdsp-control-ui-surface {
17
- display: grid;
18
- grid-template-columns: repeat(auto-fit, minmax(88px, 1fr));
19
- gap: 12px;
20
- align-items: start;
21
- max-width: 100%;
17
+ display: grid;
18
+ grid-template-columns: repeat(auto-fit, minmax(88px, 1fr));
19
+ gap: 12px;
20
+ align-items: start;
21
+ max-width: 100%;
22
22
  }
23
23
 
24
24
  .vdsp-control-ui-surface__item {
25
- min-width: 0;
25
+ min-width: 0;
26
26
  }
27
27
 
28
28
  .vdsp-control-ui-frame {
29
- display: grid;
30
- justify-items: center;
31
- align-content: start;
32
- gap: 6px;
33
- min-width: 0;
34
- color: var(--vdsp-control-ui-text-color);
29
+ display: grid;
30
+ justify-items: center;
31
+ align-content: start;
32
+ gap: 6px;
33
+ min-width: 0;
34
+ color: var(--vdsp-control-ui-text-color);
35
35
  }
36
36
 
37
37
  .vdsp-control-ui-label,
38
38
  .vdsp-control-ui-readout {
39
- max-width: 100%;
40
- overflow-wrap: anywhere;
41
- text-align: center;
42
- line-height: 1.2;
39
+ max-width: 100%;
40
+ overflow-wrap: anywhere;
41
+ text-align: center;
42
+ line-height: 1.2;
43
43
  }
44
44
 
45
45
  .vdsp-control-ui-label {
46
- color: color-mix(in srgb, var(--vdsp-control-ui-text-color) 72%, white);
47
- font-size: 0.78rem;
48
- font-weight: 650;
46
+ color: color-mix(in srgb, var(--vdsp-control-ui-text-color) 72%, white);
47
+ font-size: 0.78rem;
48
+ font-weight: 650;
49
49
  }
50
50
 
51
51
  .vdsp-control-ui-readout {
52
- color: var(--vdsp-control-ui-muted-text-color);
53
- font-size: 0.72rem;
52
+ color: var(--vdsp-control-ui-muted-text-color);
53
+ font-size: 0.72rem;
54
54
  }
55
55
 
56
56
  .vdsp-control-ui-control {
57
- box-sizing: border-box;
58
- font: inherit;
59
- color: var(--vdsp-control-ui-text-color);
57
+ box-sizing: border-box;
58
+ font: inherit;
59
+ color: var(--vdsp-control-ui-text-color);
60
60
  }
61
61
 
62
62
  .vdsp-control-ui-control:focus-visible {
63
- outline: 2px solid var(--vdsp-control-ui-focus-ring-color);
64
- outline-offset: 3px;
63
+ outline: 2px solid var(--vdsp-control-ui-focus-ring-color);
64
+ outline-offset: 3px;
65
65
  }
66
66
 
67
67
  .vdsp-control-ui-frame.is-disabled {
68
- opacity: 0.55;
68
+ opacity: 0.55;
69
69
  }
70
70
 
71
71
  .vdsp-control-ui-knob {
72
- position: relative;
73
- display: grid;
74
- place-items: center;
75
- width: 64px;
76
- height: 64px;
77
- aspect-ratio: 1;
78
- border: 0;
79
- border-radius: 50%;
80
- background: transparent;
81
- padding: 0;
82
- cursor: ew-resize;
83
- touch-action: none;
84
- user-select: none;
72
+ position: relative;
73
+ display: grid;
74
+ place-items: center;
75
+ width: 64px;
76
+ height: 64px;
77
+ aspect-ratio: 1;
78
+ border: 0;
79
+ border-radius: 50%;
80
+ background: transparent;
81
+ padding: 0;
82
+ cursor: ew-resize;
83
+ touch-action: none;
84
+ user-select: none;
85
85
  }
86
86
 
87
87
  .vdsp-control-ui-knob:active {
88
- cursor: ew-resize;
88
+ cursor: ew-resize;
89
89
  }
90
90
 
91
91
  .vdsp-control-ui-knob.is-dragging {
92
- cursor: ew-resize;
92
+ cursor: ew-resize;
93
93
  }
94
94
 
95
95
  .vdsp-control-ui-is-knob-dragging,
96
96
  .vdsp-control-ui-is-knob-dragging * {
97
- cursor: ew-resize !important;
97
+ cursor: ew-resize !important;
98
98
  }
99
99
 
100
100
  .vdsp-control-ui-knob:disabled {
101
- cursor: not-allowed;
101
+ cursor: not-allowed;
102
102
  }
103
103
 
104
104
  .vdsp-control-ui-knob__progress,
105
105
  .vdsp-control-ui-knob__progress-fill {
106
- position: absolute;
107
- inset: 0;
108
- border-radius: 50%;
109
- pointer-events: none;
110
- -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 2px), #000 calc(100% - 2px));
111
- mask: radial-gradient(farthest-side, transparent calc(100% - 2px), #000 calc(100% - 2px));
106
+ position: absolute;
107
+ inset: 0;
108
+ border-radius: 50%;
109
+ pointer-events: none;
110
+ -webkit-mask: radial-gradient(
111
+ farthest-side,
112
+ transparent calc(100% - 2px),
113
+ #000 calc(100% - 2px)
114
+ );
115
+ mask: radial-gradient(
116
+ farthest-side,
117
+ transparent calc(100% - 2px),
118
+ #000 calc(100% - 2px)
119
+ );
112
120
  }
113
121
 
114
122
  .vdsp-control-ui-knob__progress {
115
- background: conic-gradient(
116
- from -150deg,
117
- var(--vdsp-control-ui-border-color) 0 var(--vdsp-control-ui-knob-sweep, 300deg),
118
- transparent var(--vdsp-control-ui-knob-sweep, 300deg) 360deg
119
- );
123
+ background: conic-gradient(
124
+ from -150deg,
125
+ var(--vdsp-control-ui-border-color) 0
126
+ var(--vdsp-control-ui-knob-sweep, 300deg),
127
+ transparent var(--vdsp-control-ui-knob-sweep, 300deg) 360deg
128
+ );
120
129
  }
121
130
 
122
131
  .vdsp-control-ui-knob__progress-fill {
123
- background: conic-gradient(
124
- from -150deg,
125
- var(--vdsp-control-ui-accent-color) 0 var(--vdsp-control-ui-knob-progress, 0deg),
126
- transparent var(--vdsp-control-ui-knob-progress, 0deg) 360deg
127
- );
132
+ background: conic-gradient(
133
+ from -150deg,
134
+ var(--vdsp-control-ui-accent-color) 0
135
+ var(--vdsp-control-ui-knob-progress, 0deg),
136
+ transparent var(--vdsp-control-ui-knob-progress, 0deg) 360deg
137
+ );
128
138
  }
129
139
 
130
140
  .vdsp-control-ui-knob__body {
131
- position: absolute;
132
- inset: 7px;
133
- border: 1px solid color-mix(in srgb, var(--vdsp-control-ui-control-color) 72%, white);
134
- border-radius: 50%;
135
- background: var(--vdsp-control-ui-control-color);
136
- box-shadow: inset 0 1px 2px rgb(255 255 255 / 0.18), 0 2px 5px rgb(0 0 0 / 0.2);
137
- pointer-events: none;
141
+ position: absolute;
142
+ inset: 7px;
143
+ border: 1px solid
144
+ color-mix(in srgb, var(--vdsp-control-ui-control-color) 72%, white);
145
+ border-radius: 50%;
146
+ background: var(--vdsp-control-ui-control-color);
147
+ box-shadow:
148
+ inset 0 1px 2px rgb(255 255 255 / 0.18),
149
+ 0 2px 5px rgb(0 0 0 / 0.2);
150
+ pointer-events: none;
138
151
  }
139
152
 
140
153
  .vdsp-control-ui-knob__indicator-line {
141
- position: absolute;
142
- left: 50%;
143
- top: 6px;
144
- width: 2px;
145
- height: 18px;
146
- border-radius: 999px;
147
- background: var(--vdsp-control-ui-background-color);
148
- box-shadow: 0 0 0 1px rgb(0 0 0 / 0.08);
149
- transform: translateX(-50%) rotate(var(--vdsp-control-ui-knob-rotation, 0deg));
150
- transform-origin: 50% 19px;
154
+ position: absolute;
155
+ left: 50%;
156
+ top: 6px;
157
+ width: 2px;
158
+ height: 18px;
159
+ border-radius: 999px;
160
+ background: var(--vdsp-control-ui-background-color);
161
+ box-shadow: 0 0 0 1px rgb(0 0 0 / 0.08);
162
+ transform: translateX(-50%) rotate(var(--vdsp-control-ui-knob-rotation, 0deg));
163
+ transform-origin: 50% 19px;
151
164
  }
152
165
 
153
166
  .vdsp-control-ui-footswitch {
154
- width: 58px;
155
- height: 58px;
156
- aspect-ratio: 1;
157
- border: 1px solid var(--vdsp-control-ui-border-color);
158
- border-radius: 50%;
159
- background: var(--vdsp-control-ui-control-color);
160
- box-shadow: none;
161
- cursor: pointer;
167
+ width: 58px;
168
+ height: 58px;
169
+ aspect-ratio: 1;
170
+ border: 1px solid var(--vdsp-control-ui-border-color);
171
+ border-radius: 50%;
172
+ background: var(--vdsp-control-ui-control-color);
173
+ box-shadow: none;
174
+ cursor: pointer;
162
175
  }
163
176
 
164
177
  .vdsp-control-ui-footswitch.is-pressing,
165
178
  .vdsp-control-ui-footswitch:active {
166
- border-width: 3px;
179
+ border-width: 3px;
167
180
  }
168
181
 
169
182
  .vdsp-control-ui-footswitch__cap {
170
- display: none;
171
- width: 28px;
172
- height: 28px;
173
- margin: auto;
174
- border-radius: 50%;
175
- background: #f8fafc;
183
+ display: none;
184
+ width: 28px;
185
+ height: 28px;
186
+ margin: auto;
187
+ border-radius: 50%;
188
+ background: #f8fafc;
176
189
  }
177
190
 
178
191
  .vdsp-control-ui-toggle {
179
- display: inline-flex;
180
- align-items: center;
181
- width: 52px;
182
- height: 30px;
183
- border: 1px solid var(--vdsp-control-ui-border-color);
184
- border-radius: 999px;
185
- background: var(--vdsp-control-ui-control-color);
186
- box-shadow: none;
187
- padding: 3px;
188
- cursor: pointer;
192
+ display: inline-flex;
193
+ align-items: center;
194
+ width: 52px;
195
+ height: 30px;
196
+ border: 1px solid var(--vdsp-control-ui-border-color);
197
+ border-radius: 999px;
198
+ background: var(--vdsp-control-ui-control-color);
199
+ box-shadow: none;
200
+ padding: 3px;
201
+ cursor: pointer;
189
202
  }
190
203
 
191
204
  .vdsp-control-ui-toggle.is-checked {
192
- background: var(--vdsp-control-ui-accent-color);
205
+ background: var(--vdsp-control-ui-accent-color);
193
206
  }
194
207
 
195
208
  .vdsp-control-ui-toggle__track {
196
- display: block;
197
- width: 100%;
209
+ display: block;
210
+ width: 100%;
198
211
  }
199
212
 
200
213
  .vdsp-control-ui-toggle__thumb {
201
- display: block;
202
- width: 22px;
203
- height: 22px;
204
- border-radius: 50%;
205
- background: var(--vdsp-control-ui-background-color);
206
- box-shadow: none;
207
- transition: transform 120ms ease;
214
+ display: block;
215
+ width: 22px;
216
+ height: 22px;
217
+ border-radius: 50%;
218
+ background: var(--vdsp-control-ui-background-color);
219
+ box-shadow: none;
220
+ transition: transform 120ms ease;
208
221
  }
209
222
 
210
223
  .vdsp-control-ui-toggle.is-checked .vdsp-control-ui-toggle__thumb {
211
- transform: translateX(20px);
224
+ transform: translateX(20px);
212
225
  }
213
226
 
214
227
  .vdsp-control-ui-slider-shell {
215
- position: relative;
216
- display: grid;
217
- place-items: center;
218
- width: 100%;
219
- min-height: 32px;
228
+ position: relative;
229
+ display: grid;
230
+ place-items: center;
231
+ width: 100%;
232
+ min-height: 32px;
220
233
  }
221
234
 
222
235
  .vdsp-control-ui-slider-shell.is-vertical {
223
- min-height: 112px;
236
+ min-height: 112px;
224
237
  }
225
238
 
226
239
  .vdsp-control-ui-slider {
227
- --vdsp-control-ui-slider-position: 50%;
228
- width: min(132px, 100%);
229
- accent-color: var(--vdsp-control-ui-accent-color);
230
- background: transparent;
231
- -webkit-appearance: none;
232
- appearance: none;
240
+ --vdsp-control-ui-slider-position: 50%;
241
+ width: min(132px, 100%);
242
+ accent-color: var(--vdsp-control-ui-accent-color);
243
+ background: transparent;
244
+ -webkit-appearance: none;
245
+ appearance: none;
233
246
  }
234
247
 
235
248
  .vdsp-control-ui-slider[data-orientation="vertical"] {
236
- width: 112px;
237
- transform: rotate(-90deg);
249
+ width: 112px;
250
+ transform: rotate(-90deg);
238
251
  }
239
252
 
240
253
  .vdsp-control-ui-slider::-webkit-slider-runnable-track {
241
- height: 4px;
242
- border: 0;
243
- border-radius: 999px;
244
- background: linear-gradient(
245
- 90deg,
246
- var(--vdsp-control-ui-accent-color) 0 var(--vdsp-control-ui-slider-position),
247
- color-mix(in srgb, var(--vdsp-control-ui-control-color) 52%, white)
248
- var(--vdsp-control-ui-slider-position) 100%
249
- );
250
- box-shadow: none;
251
- -webkit-appearance: none;
254
+ height: 4px;
255
+ border: 0;
256
+ border-radius: 999px;
257
+ background: linear-gradient(
258
+ 90deg,
259
+ var(--vdsp-control-ui-accent-color) 0 var(--vdsp-control-ui-slider-position),
260
+ color-mix(in srgb, var(--vdsp-control-ui-control-color) 52%, white)
261
+ var(--vdsp-control-ui-slider-position) 100%
262
+ );
263
+ box-shadow: none;
264
+ -webkit-appearance: none;
252
265
  }
253
266
 
254
267
  .vdsp-control-ui-slider::-webkit-slider-thumb {
255
- width: 14px;
256
- height: 14px;
257
- margin-top: -5px;
258
- border: 0;
259
- border-radius: 50%;
260
- background: var(--vdsp-control-ui-accent-color);
261
- box-shadow: none;
262
- -webkit-appearance: none;
268
+ width: 14px;
269
+ height: 14px;
270
+ margin-top: -5px;
271
+ border: 0;
272
+ border-radius: 50%;
273
+ background: var(--vdsp-control-ui-accent-color);
274
+ box-shadow: none;
275
+ -webkit-appearance: none;
263
276
  }
264
277
 
265
278
  .vdsp-control-ui-slider::-moz-range-track {
266
- height: 4px;
267
- border: 0;
268
- border-radius: 999px;
269
- background: linear-gradient(
270
- 90deg,
271
- var(--vdsp-control-ui-accent-color) 0 var(--vdsp-control-ui-slider-position),
272
- color-mix(in srgb, var(--vdsp-control-ui-control-color) 52%, white)
273
- var(--vdsp-control-ui-slider-position) 100%
274
- );
275
- box-shadow: none;
279
+ height: 4px;
280
+ border: 0;
281
+ border-radius: 999px;
282
+ background: linear-gradient(
283
+ 90deg,
284
+ var(--vdsp-control-ui-accent-color) 0 var(--vdsp-control-ui-slider-position),
285
+ color-mix(in srgb, var(--vdsp-control-ui-control-color) 52%, white)
286
+ var(--vdsp-control-ui-slider-position) 100%
287
+ );
288
+ box-shadow: none;
276
289
  }
277
290
 
278
291
  .vdsp-control-ui-slider::-moz-range-thumb {
279
- width: 14px;
280
- height: 14px;
281
- border: 0;
282
- border-radius: 50%;
283
- background: var(--vdsp-control-ui-accent-color);
284
- box-shadow: none;
292
+ width: 14px;
293
+ height: 14px;
294
+ border: 0;
295
+ border-radius: 50%;
296
+ background: var(--vdsp-control-ui-accent-color);
297
+ box-shadow: none;
285
298
  }
286
299
 
287
300
  .vdsp-control-ui-select {
288
- width: min(100%, 144px);
289
- min-height: 34px;
290
- border: 1px solid var(--vdsp-control-ui-border-color);
291
- border-radius: 0;
292
- background-color: var(--vdsp-control-ui-control-color);
293
- background-image:
294
- linear-gradient(45deg, transparent 50%, currentColor 50%),
295
- linear-gradient(135deg, currentColor 50%, transparent 50%);
296
- background-position: calc(100% - 17px) 50%, calc(100% - 12px) 50%;
297
- background-repeat: no-repeat;
298
- background-size: 5px 5px, 5px 5px;
299
- box-shadow: none;
300
- color: var(--vdsp-control-ui-background-color);
301
- padding: 4px 28px 4px 8px;
302
- appearance: none;
303
- cursor: pointer;
301
+ width: min(100%, 144px);
302
+ min-height: 34px;
303
+ border: 1px solid var(--vdsp-control-ui-border-color);
304
+ border-radius: 0;
305
+ background-color: var(--vdsp-control-ui-control-color);
306
+ background-image:
307
+ linear-gradient(45deg, transparent 50%, currentColor 50%),
308
+ linear-gradient(135deg, currentColor 50%, transparent 50%);
309
+ background-position:
310
+ calc(100% - 17px) 50%,
311
+ calc(100% - 12px) 50%;
312
+ background-repeat: no-repeat;
313
+ background-size:
314
+ 5px 5px,
315
+ 5px 5px;
316
+ box-shadow: none;
317
+ color: var(--vdsp-control-ui-background-color);
318
+ padding: 4px 28px 4px 8px;
319
+ appearance: none;
320
+ cursor: pointer;
304
321
  }
305
322
 
306
323
  .vdsp-control-ui-select option {
307
- background-color: var(--vdsp-control-ui-control-color);
308
- color: var(--vdsp-control-ui-background-color);
324
+ background-color: var(--vdsp-control-ui-control-color);
325
+ color: var(--vdsp-control-ui-background-color);
309
326
  }
310
327
 
311
328
  .vdsp-control-ui-led {
312
- width: 22px;
313
- height: 22px;
314
- aspect-ratio: 1;
315
- border: 1px solid color-mix(in srgb, var(--vdsp-control-ui-border-color) 70%, black);
316
- border-radius: 50%;
317
- background: #7f1d1d;
318
- box-shadow: inset 0 1px 4px rgb(0 0 0 / 0.45);
329
+ width: 22px;
330
+ height: 22px;
331
+ aspect-ratio: 1;
332
+ border: 1px solid
333
+ color-mix(in srgb, var(--vdsp-control-ui-border-color) 70%, black);
334
+ border-radius: 50%;
335
+ background: #7f1d1d;
336
+ box-shadow: inset 0 1px 4px rgb(0 0 0 / 0.45);
319
337
  }
320
338
 
321
339
  .vdsp-control-ui-led.is-on {
322
- background: color-mix(
323
- in srgb,
324
- var(--vdsp-control-ui-accent-color) calc(var(--vdsp-control-ui-led-intensity, 1) * 100%),
325
- #7f1d1d
326
- );
327
- box-shadow: 0 0 14px color-mix(in srgb, var(--vdsp-control-ui-accent-color) 70%, transparent);
340
+ background: color-mix(
341
+ in srgb,
342
+ var(--vdsp-control-ui-accent-color)
343
+ calc(var(--vdsp-control-ui-led-intensity, 1) * 100%),
344
+ #7f1d1d
345
+ );
346
+ box-shadow: 0 0 14px
347
+ color-mix(in srgb, var(--vdsp-control-ui-accent-color) 70%, transparent);
328
348
  }
329
349
 
330
350
  .vdsp-control-ui-control:disabled,
331
351
  .vdsp-control-ui-surface.is-disabled .vdsp-control-ui-control {
332
- cursor: not-allowed;
352
+ cursor: not-allowed;
353
+ }
354
+
355
+ .vdsp-control-ui-jack {
356
+ width: 26px;
357
+ height: 26px;
358
+ aspect-ratio: 1;
359
+ border: 2px solid
360
+ color-mix(in srgb, var(--vdsp-control-ui-border-color) 80%, black);
361
+ border-radius: 50%;
362
+ background: radial-gradient(
363
+ circle at center,
364
+ #111827 0 32%,
365
+ color-mix(in srgb, var(--vdsp-control-ui-control-color) 60%, #4b5563) 33%
366
+ 100%
367
+ );
368
+ box-shadow: inset 0 1px 3px rgb(0 0 0 / 0.5);
369
+ }
370
+
371
+ .vdsp-control-ui-concentric {
372
+ display: grid;
373
+ place-items: center;
374
+ gap: 4px;
375
+ }
376
+
377
+ .vdsp-control-ui-concentric__stacked .vdsp-control-ui-knob {
378
+ width: 44px;
379
+ height: 44px;
333
380
  }
package/dist/theme.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import type { CSSProperties, ReactNode } from 'react';
2
- import type { ControlUiTheme } from './types';
1
+ import type { CSSProperties, ReactNode } from "react";
2
+ import type { ControlUiTheme } from "./types";
3
3
  type ThemeStyle = CSSProperties & Record<`--vdsp-control-ui-${string}`, string | number | undefined>;
4
4
  export type ControlUiThemeProviderProps = Readonly<{
5
5
  theme: ControlUiTheme;
@@ -7,7 +7,7 @@ export type ControlUiThemeProviderProps = Readonly<{
7
7
  style?: CSSProperties | undefined;
8
8
  children: ReactNode;
9
9
  }>;
10
- export declare function ControlUiThemeProvider({ theme, className, style, children }: ControlUiThemeProviderProps): import("react").JSX.Element;
10
+ export declare function ControlUiThemeProvider({ theme, className, style, children, }: ControlUiThemeProviderProps): import("react").JSX.Element;
11
11
  export declare function useControlUiTheme(): ControlUiTheme;
12
12
  export declare function themeToCssVariables(theme: ControlUiTheme): ThemeStyle;
13
13
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,KAAK,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC,qBAAqB,MAAM,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;AAIrG,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC;IAC/C,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAClC,QAAQ,EAAE,SAAS,CAAC;CACvB,CAAC,CAAC;AAEH,wBAAgB,sBAAsB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,2BAA2B,+BAaxG;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAElD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAcrE"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,KAAK,UAAU,GAAG,aAAa,GAC9B,MAAM,CAAC,qBAAqB,MAAM,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;AAIpE,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC;IAClD,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAClC,QAAQ,EAAE,SAAS,CAAC;CACpB,CAAC,CAAC;AAEH,wBAAgB,sBAAsB,CAAC,EACtC,KAAK,EACL,SAAS,EACT,KAAK,EACL,QAAQ,GACR,EAAE,2BAA2B,+BAgB7B;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAElD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAwBrE"}
package/dist/theme.js CHANGED
@@ -1,30 +1,40 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { createContext, useContext } from 'react';
3
- import { cx } from './utils.js';
2
+ import { createContext, useContext } from "react";
3
+ import { cx } from "./utils.js";
4
4
  const ControlUiThemeContext = createContext({});
5
- export function ControlUiThemeProvider({ theme, className, style, children }) {
5
+ export function ControlUiThemeProvider({ theme, className, style, children, }) {
6
6
  const themeStyle = {
7
7
  ...style,
8
8
  ...themeToCssVariables(theme),
9
9
  };
10
- return (_jsx(ControlUiThemeContext.Provider, { value: theme, children: _jsx("div", { className: cx('vdsp-control-ui-theme', className), style: themeStyle, children: children }) }));
10
+ return (_jsx(ControlUiThemeContext.Provider, { value: theme, children: _jsx("div", { className: cx("vdsp-control-ui-theme", className), style: themeStyle, children: children }) }));
11
11
  }
12
12
  export function useControlUiTheme() {
13
13
  return useContext(ControlUiThemeContext);
14
14
  }
15
15
  export function themeToCssVariables(theme) {
16
16
  return {
17
- ...(theme.accentColor === undefined ? {} : { '--vdsp-control-ui-accent-color': theme.accentColor }),
17
+ ...(theme.accentColor === undefined
18
+ ? {}
19
+ : { "--vdsp-control-ui-accent-color": theme.accentColor }),
18
20
  ...(theme.backgroundColor === undefined
19
21
  ? {}
20
- : { '--vdsp-control-ui-background-color': theme.backgroundColor }),
21
- ...(theme.borderColor === undefined ? {} : { '--vdsp-control-ui-border-color': theme.borderColor }),
22
- ...(theme.controlColor === undefined ? {} : { '--vdsp-control-ui-control-color': theme.controlColor }),
23
- ...(theme.textColor === undefined ? {} : { '--vdsp-control-ui-text-color': theme.textColor }),
24
- ...(theme.mutedTextColor === undefined ? {} : { '--vdsp-control-ui-muted-text-color': theme.mutedTextColor }),
22
+ : { "--vdsp-control-ui-background-color": theme.backgroundColor }),
23
+ ...(theme.borderColor === undefined
24
+ ? {}
25
+ : { "--vdsp-control-ui-border-color": theme.borderColor }),
26
+ ...(theme.controlColor === undefined
27
+ ? {}
28
+ : { "--vdsp-control-ui-control-color": theme.controlColor }),
29
+ ...(theme.textColor === undefined
30
+ ? {}
31
+ : { "--vdsp-control-ui-text-color": theme.textColor }),
32
+ ...(theme.mutedTextColor === undefined
33
+ ? {}
34
+ : { "--vdsp-control-ui-muted-text-color": theme.mutedTextColor }),
25
35
  ...(theme.focusRingColor === undefined
26
36
  ? {}
27
- : { '--vdsp-control-ui-focus-ring-color': theme.focusRingColor }),
37
+ : { "--vdsp-control-ui-focus-ring-color": theme.focusRingColor }),
28
38
  };
29
39
  }
30
40
  //# sourceMappingURL=theme.js.map
package/dist/theme.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGlD,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAI7B,MAAM,qBAAqB,GAAG,aAAa,CAAiB,EAAE,CAAC,CAAC;AAShE,MAAM,UAAU,sBAAsB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAA+B;IACrG,MAAM,UAAU,GAAe;QAC3B,GAAG,KAAK;QACR,GAAG,mBAAmB,CAAC,KAAK,CAAC;KAChC,CAAC;IAEF,OAAO,CACH,KAAC,qBAAqB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YACxC,cAAK,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,UAAU,YACpE,QAAQ,GACP,GACuB,CACpC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC7B,OAAO,UAAU,CAAC,qBAAqB,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAqB;IACrD,OAAO;QACH,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gCAAgC,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;QACnG,GAAG,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS;YACnC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,oCAAoC,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;QACtE,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gCAAgC,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;QACnG,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iCAAiC,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;QACtG,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,8BAA8B,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;QAC7F,GAAG,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,oCAAoC,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;QAC7G,GAAG,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS;YAClC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,oCAAoC,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;KACxE,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGlD,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAK7B,MAAM,qBAAqB,GAAG,aAAa,CAAiB,EAAE,CAAC,CAAC;AAShE,MAAM,UAAU,sBAAsB,CAAC,EACtC,KAAK,EACL,SAAS,EACT,KAAK,EACL,QAAQ,GACqB;IAC7B,MAAM,UAAU,GAAe;QAC9B,GAAG,KAAK;QACR,GAAG,mBAAmB,CAAC,KAAK,CAAC;KAC7B,CAAC;IAEF,OAAO,CACN,KAAC,qBAAqB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAC3C,cACC,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,SAAS,CAAC,EACjD,KAAK,EAAE,UAAU,YAEhB,QAAQ,GACJ,GAC0B,CACjC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB;IAChC,OAAO,UAAU,CAAC,qBAAqB,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAqB;IACxD,OAAO;QACN,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS;YAClC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,gCAAgC,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;QAC3D,GAAG,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS;YACtC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,oCAAoC,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;QACnE,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS;YAClC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,gCAAgC,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;QAC3D,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS;YACnC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,iCAAiC,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;QAC7D,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS;YAChC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,8BAA8B,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;QACvD,GAAG,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS;YACrC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,oCAAoC,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;QAClE,GAAG,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS;YACrC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,oCAAoC,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;KAClE,CAAC;AACH,CAAC"}