@tremolo-ui/react 0.4.0 → 0.6.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 (90) hide show
  1. package/dist/compose-refs.cjs +72 -0
  2. package/dist/compose-refs.cjs.map +1 -0
  3. package/dist/compose-refs.d.cts +43 -0
  4. package/dist/compose-refs.d.cts.map +1 -0
  5. package/dist/compose-refs.d.ts +43 -0
  6. package/dist/compose-refs.d.ts.map +1 -0
  7. package/dist/compose-refs.js +70 -0
  8. package/dist/compose-refs.js.map +1 -0
  9. package/dist/index.cjs +2272 -1650
  10. package/dist/index.cjs.map +1 -1
  11. package/dist/index.d.cts +1461 -475
  12. package/dist/index.d.cts.map +1 -1
  13. package/dist/index.d.ts +1461 -475
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +2258 -1648
  16. package/dist/index.js.map +1 -1
  17. package/package.json +32 -31
  18. package/src/components/AnimationCanvas/index.tsx +162 -194
  19. package/src/components/Knob/ActiveLine.tsx +9 -8
  20. package/src/components/Knob/InactiveLine.tsx +11 -14
  21. package/src/components/Knob/SVGRoot.tsx +10 -17
  22. package/src/components/Knob/Thumb.tsx +33 -11
  23. package/src/components/Knob/context.tsx +73 -89
  24. package/src/components/Knob/index.tsx +227 -105
  25. package/src/components/NumberInput/DecrementStepper.tsx +21 -50
  26. package/src/components/NumberInput/IncrementStepper.tsx +22 -50
  27. package/src/components/NumberInput/InputField.tsx +206 -0
  28. package/src/components/NumberInput/Stepper.tsx +150 -21
  29. package/src/components/NumberInput/StepperButton.tsx +95 -0
  30. package/src/components/NumberInput/context.tsx +104 -149
  31. package/src/components/NumberInput/index.tsx +461 -110
  32. package/src/components/Piano/index.tsx +413 -263
  33. package/src/components/Piano/keyboard-shortcuts.ts +61 -0
  34. package/src/components/PointsEditor/Background.tsx +19 -4
  35. package/src/components/PointsEditor/Container.tsx +92 -22
  36. package/src/components/PointsEditor/Point.tsx +293 -53
  37. package/src/components/PointsEditor/SelectionBox.tsx +54 -0
  38. package/src/components/PointsEditor/context.tsx +97 -75
  39. package/src/components/PointsEditor/index.tsx +497 -62
  40. package/src/components/Slider/Marks.tsx +84 -0
  41. package/src/components/Slider/MarksOption.tsx +115 -0
  42. package/src/components/Slider/Thumb.tsx +99 -54
  43. package/src/components/Slider/Track.tsx +73 -62
  44. package/src/components/Slider/context.tsx +40 -53
  45. package/src/components/Slider/index.tsx +237 -190
  46. package/src/components/Slider/type.ts +27 -9
  47. package/src/components/XYPad/Area.tsx +52 -33
  48. package/src/components/XYPad/Thumb.tsx +121 -60
  49. package/src/components/XYPad/context.tsx +49 -0
  50. package/src/components/XYPad/index.tsx +338 -246
  51. package/src/components/_util/Placement.tsx +68 -0
  52. package/src/components/_util/VisuallyHiddenRangeInput.tsx +24 -0
  53. package/src/components/_util/css-length.ts +13 -0
  54. package/src/{components/_util/composeRefs.tsx → compose-refs/index.tsx} +33 -5
  55. package/src/hooks/{useCallbackRef.ts → _internal/useCallbackRef.ts} +3 -1
  56. package/src/hooks/_internal/useCheckSteps.ts +170 -0
  57. package/src/hooks/useAnimationFrame.ts +17 -7
  58. package/src/hooks/useDrag.ts +39 -9
  59. package/src/hooks/useDragValue.ts +194 -0
  60. package/src/hooks/useEventListener.ts +11 -7
  61. package/src/hooks/useLongPress.ts +42 -8
  62. package/src/hooks/useMIDIAccess.ts +82 -11
  63. package/src/hooks/useMIDIInput.ts +45 -13
  64. package/src/hooks/useMIDIMessage.ts +23 -5
  65. package/src/hooks/useWheel.ts +29 -9
  66. package/src/index.ts +50 -27
  67. package/src/input-event.ts +32 -0
  68. package/dist/index.css +0 -536
  69. package/src/Globals.d.ts +0 -3
  70. package/src/components/AnimationCanvas/canvas.ts +0 -46
  71. package/src/components/Knob/index.css +0 -77
  72. package/src/components/NumberInput/InternalInput.tsx +0 -216
  73. package/src/components/NumberInput/index.css +0 -185
  74. package/src/components/NumberInput/type.ts +0 -58
  75. package/src/components/Piano/KeyLabel.tsx +0 -51
  76. package/src/components/Piano/context.tsx +0 -73
  77. package/src/components/Piano/index.css +0 -90
  78. package/src/components/Piano/key.tsx +0 -205
  79. package/src/components/Piano/keyboardShortcuts.ts +0 -31
  80. package/src/components/PointsEditor/index.css +0 -30
  81. package/src/components/Slider/Scale.tsx +0 -52
  82. package/src/components/Slider/ScaleOption.tsx +0 -103
  83. package/src/components/Slider/index.css +0 -112
  84. package/src/components/XYPad/index.css +0 -48
  85. package/src/components/_util/index.ts +0 -28
  86. package/src/components/_util/type.ts +0 -1
  87. package/src/hooks/useDragWithElement.ts +0 -100
  88. package/src/hooks/usePianoDrag.ts +0 -75
  89. package/src/hooks/useRefCallbackEvent.ts +0 -34
  90. package/src/styles/global.css +0 -19
package/dist/index.css DELETED
@@ -1,536 +0,0 @@
1
- .tremolo-user-select-none {
2
- user-select: none;
3
- }
4
-
5
- .tremolo-cursor-pointer {
6
- cursor: pointer;
7
- }
8
-
9
- .tremolo-cursor-move {
10
- cursor: move;
11
- }
12
-
13
- .tremolo-cursor-grabbing {
14
- cursor: grabbing;
15
- }
16
-
17
- .tremolo-cursor-none {
18
- cursor: none;
19
- }
20
- .tremolo-knob {
21
- cursor: grab;
22
- outline: 0;
23
- display: inline-block;
24
- overflow: visible;
25
-
26
- &[aria-readonly="true"] {
27
- cursor: not-allowed;
28
- }
29
-
30
- &[data-dragging="true"] {
31
- cursor: inherit;
32
- }
33
- }
34
-
35
- .tremolo-knob-active-line {
36
- color: oklch(69.2% .17548 266.373);
37
- overflow: visible;
38
-
39
- :where(.tremolo-knob:focus, .tremolo-knob:hover) & {
40
- color: oklch(59.5% .17548 266.373);
41
- }
42
-
43
- :where(.tremolo-knob[aria-disabled="true"]) & {
44
- color: oklch(50.5% .03307 270.021);
45
- }
46
- }
47
-
48
- .tremolo-knob-inactive-line {
49
- color: oklch(95% 0 0);
50
-
51
- :where(.tremolo-knob:focus, .tremolo-knob:hover) & {
52
- color: oklch(90% 0 0);
53
- }
54
- }
55
-
56
- .tremolo-knob-thumb {
57
- color: oklch(85.7% 0 0);
58
-
59
- :where(.tremolo-knob:focus, .tremolo-knob:hover) & {
60
- color: oklch(84.5% 0 0);
61
- }
62
- }
63
-
64
- .tremolo-knob-thumb-line {
65
- color: oklch(94.2% 0 0);
66
- }
67
-
68
- :where(.dark, [data-theme="dark"]) {
69
- & .tremolo-knob-active-line {
70
- color: oklch(59.5% .17548 266.373);
71
-
72
- :where(.tremolo-knob:focus, .tremolo-knob:hover) & {
73
- color: oklch(65.2% .17548 266.373);
74
- }
75
- }
76
-
77
- & .tremolo-knob-inactive-line {
78
- color: oklch(41.7% 0 0);
79
-
80
- :where(.tremolo-knob:focus, .tremolo-knob:hover) & {
81
- color: oklch(44.59% 0 0);
82
- }
83
- }
84
-
85
- & .tremolo-knob-thumb {
86
- color: oklch(48.6% 0 0);
87
-
88
- :where(.tremolo-knob:focus, .tremolo-knob:hover) & {
89
- color: oklch(51.7% 0 0);
90
- }
91
- }
92
-
93
- & .tremolo-knob-thumb-line {
94
- color: oklch(84.2% 0 0);
95
- }
96
- }
97
- .tremolo-number-input-wrapper {
98
- --border-radius: 4px;
99
- --stepper-width: 20px;
100
- --active-color: oklch(59.5% .17548 266.373);
101
- --border-color: oklch(81% 0 0);
102
- border-style: solid;
103
- border-color: var(--border-color);
104
- border-width: 0;
105
- outline: none;
106
- flex-direction: row;
107
- width: 140px;
108
- height: min-content;
109
- transition: all .1s;
110
- display: inline-flex;
111
- position: relative;
112
-
113
- &:not(:focus-within):has( > .tremolo-number-input[data-error="true"]) {
114
- border-color: oklch(64.245% .21266 25.499);
115
- }
116
-
117
- &[data-variant="outline"] {
118
- border-radius: var(--border-radius);
119
- border-width: 1px;
120
-
121
- &:hover {
122
- --border-color: oklch(65.335% 0 0);
123
- }
124
-
125
- &:focus-within {
126
- --border-color: var(--active-color);
127
- box-shadow: 0px 0px 0px 2px
128
- color-mix(in srgb, var(--active-color) 10%, transparent);
129
- }
130
- }
131
-
132
- &[data-variant="filled"] {
133
- --bg: oklch(95.88% 0 0);
134
- border-radius: var(--border-radius);
135
- background-color: var(--bg);
136
- border-width: 1px;
137
- border-color: #0000;
138
-
139
- &:hover {
140
- --bg: oklch(93.166% 0 0);
141
- }
142
-
143
- &:focus-within {
144
- background-color: inherit;
145
- --border-color: var(--active-color);
146
- box-shadow: 0px 0px 0px 2px
147
- color-mix(in srgb, var(--active-color) 10%, transparent);
148
- }
149
- }
150
-
151
- &[data-variant="flushed"] {
152
- border-bottom-width: 1px;
153
-
154
- &:hover {
155
- --border-color: oklch(65.335% 0 0);
156
- }
157
-
158
- &:focus-within {
159
- --border-color: var(--active-color);
160
- box-shadow: 0px 2px 0px 0px
161
- color-mix(in srgb, var(--active-color) 10%, transparent);
162
- }
163
- }
164
-
165
- &[data-stepper="false"] {
166
- --stepper-width: 0px;
167
- }
168
- }
169
-
170
- .tremolo-number-input {
171
- color: inherit;
172
- width: calc(100% - 20px - var(--stepper-width));
173
- background-color: inherit;
174
- font: inherit;
175
- appearance: none;
176
- border: none;
177
- outline: none;
178
- margin: 0;
179
- padding: 6px 10px;
180
- display: block;
181
-
182
- &[aria-readonly="true"] {
183
- cursor: not-allowed;
184
- }
185
- }
186
-
187
- .tremolo-number-input-stepper {
188
- height: 100%;
189
- width: var(--stepper-width);
190
- flex-direction: column;
191
- transition: all .1s linear;
192
- display: flex;
193
- position: absolute;
194
- top: 0;
195
- right: 0;
196
-
197
- &[data-dynamic="true"] {
198
- opacity: 0;
199
- transform: translateX(40%);
200
- }
201
- }
202
-
203
- :is(.tremolo-number-input-wrapper:hover, .tremolo-number-input-wrapper:focus-within) .tremolo-number-input-stepper {
204
- opacity: 1;
205
- transform: translateX(0);
206
- }
207
-
208
- .tremolo-number-input-increment-stepper {
209
- user-select: none;
210
- cursor: pointer;
211
- border-top-right-radius: var(--border-radius);
212
- border-inline-start: 1px solid oklch(84.522% 0 0);
213
- flex: 1;
214
- justify-content: center;
215
- align-items: center;
216
- max-height: 50%;
217
- font-size: .75rem;
218
- display: flex;
219
-
220
- &[aria-disabled="false"]:active {
221
- background-color: oklch(37.798% .03812 254.612 / .055);
222
- }
223
-
224
- &[aria-disabled="true"], &[aria-readonly="true"] {
225
- cursor: not-allowed;
226
- }
227
- }
228
-
229
- .tremolo-number-input-decrement-stepper {
230
- border-inline-start: 1px solid oklch(84.522% 0 0);
231
- user-select: none;
232
- cursor: pointer;
233
- border-bottom-right-radius: var(--border-radius);
234
- border-top: 1px solid oklch(84.522% 0 0);
235
- flex: 1;
236
- justify-content: center;
237
- align-items: center;
238
- max-height: 50%;
239
- font-size: .75rem;
240
- display: flex;
241
-
242
- &[aria-disabled="false"]:active {
243
- background-color: oklch(37.798% .03812 254.612 / .055);
244
- }
245
-
246
- &[aria-disabled="true"], &[aria-readonly="true"] {
247
- cursor: not-allowed;
248
- }
249
- }
250
-
251
- :where(.dark, [data-theme="dark"]) {
252
- & .tremolo-number-input-wrapper {
253
- --border-color: oklch(52% 0 0);
254
-
255
- &[data-variant="filled"] {
256
- --bg: oklch(43.5% 0 0);
257
-
258
- &:hover {
259
- --bg: oklch(46.6% 0 0);
260
- }
261
- }
262
- }
263
- }
264
- .tremolo-piano {
265
- box-sizing: border-box;
266
- user-select: none;
267
- touch-action: none;
268
- display: inline-block;
269
- position: relative;
270
- }
271
-
272
- .tremolo-piano-white-key {
273
- --bg: oklch(100% 0 0);
274
- --color: oklch(0% 0 0);
275
- --active-bg: oklch(92% 0 0);
276
- --active-color: oklch(0% 0 0);
277
- box-sizing: border-box;
278
- background-color: var(--bg);
279
- -webkit-tap-highlight-color: transparent;
280
- color: var(--color);
281
- cursor: pointer;
282
- z-index: 1;
283
- border: 1px solid #555;
284
- border-radius: 0 0 8px 8px;
285
- position: absolute;
286
-
287
- &[data-active="true"] {
288
- background-color: var(--active-bg);
289
- color: var(--active-color);
290
- }
291
-
292
- &[aria-disabled="true"] {
293
- cursor: not-allowed;
294
- }
295
- }
296
-
297
- .tremolo-piano-black-key {
298
- --color: oklch(100% 0 0);
299
- --bg: oklch(32% 0 0);
300
- --active-color: oklch(100% 0 0);
301
- --active-bg: oklch(44% 0 0);
302
- box-sizing: border-box;
303
- background-color: var(--bg);
304
- -webkit-tap-highlight-color: transparent;
305
- color: var(--color);
306
- cursor: pointer;
307
- z-index: 2;
308
- border: 1px solid #555;
309
- border-radius: 0 0 8px 8px;
310
- position: absolute;
311
-
312
- &[data-active="true"] {
313
- background-color: var(--active-bg);
314
- color: var(--active-color);
315
- }
316
-
317
- &[aria-disabled="true"] {
318
- cursor: not-allowed;
319
- }
320
- }
321
-
322
- .tremolo-piano-key-label-wrapper {
323
- justify-content: center;
324
- align-items: end;
325
- height: 100%;
326
- display: flex;
327
- }
328
-
329
- .tremolo-piano-key-label {
330
- box-sizing: content-box;
331
- aspect-ratio: 1;
332
- border: 1px solid #888;
333
- border-radius: 4px;
334
- justify-content: center;
335
- align-items: center;
336
- max-width: calc(100% - 16px);
337
- height: 10px;
338
- margin-bottom: 10px;
339
- padding: 4px;
340
- font-size: .6rem;
341
- display: flex;
342
- }
343
-
344
- :where(.dark, [data-theme="dark"]) {
345
- & .tremolo-piano-white-key {
346
- --bg: oklch(80% 0 0);
347
- --color: oklch(0% 0 0);
348
- --active-bg: oklch(72% 0 0);
349
- --active-color: oklch(0% 0 0);
350
- }
351
- }
352
- .tremolo-points-editor {
353
- position: relative;
354
- }
355
-
356
- .tremolo-points-editor-background {
357
- z-index: 0;
358
- position: absolute;
359
- inset: 0;
360
- }
361
-
362
- .tremolo-points-editor-container {
363
- z-index: 10;
364
- position: absolute;
365
- inset: 0;
366
- }
367
-
368
- .tremolo-points-editor-point {
369
- --color: oklch(59.5% .17548 266.373);
370
- cursor: grab;
371
- background-color: var(--color);
372
- border-radius: 50%;
373
- outline: none;
374
- position: absolute;
375
- translate: -50% -50%;
376
-
377
- &[data-dragging="true"] {
378
- cursor: inherit;
379
- }
380
- }
381
- .tremolo-slider {
382
- cursor: pointer;
383
- -webkit-tap-highlight-color: transparent;
384
- outline: 0;
385
- display: inline-block;
386
-
387
- &[aria-readonly="true"] {
388
- cursor: not-allowed;
389
- }
390
- }
391
-
392
- .tremolo-slider-thumb-wrapper {
393
- z-index: 100;
394
- position: absolute;
395
- translate: -50% -50%;
396
- }
397
-
398
- .tremolo-slider-thumb {
399
- --color: oklch(59.5% .17548 266.373);
400
- background: var(--color);
401
- border-radius: 50%;
402
- outline: none;
403
-
404
- &[aria-disabled="true"] {
405
- background: oklch(50.462% .03307 270.021);
406
- }
407
-
408
- &[aria-readonly="false"]:focus {
409
- box-shadow: 0px 0px 0px 3px
410
- color-mix(in srgb, var(--color) 20%, transparent);
411
- }
412
- }
413
-
414
- .tremolo-slider-track {
415
- --active: oklch(69.212% .12903 267.633);
416
- --inactive: oklch(95% 0 0);
417
- position: relative;
418
-
419
- &[data-vertical="false"] {
420
- min-width: 50px;
421
- }
422
-
423
- &[data-vertical="true"] {
424
- min-height: 50px;
425
- }
426
-
427
- &:hover {
428
- --active: oklch(64.276% .15244 266.932);
429
- --inactive: #e0e0e0;
430
- }
431
-
432
- &[aria-disabled="true"] {
433
- --active: oklch(75.327% .01237 264.547);
434
- --inactive: oklch(89.755% .0001 271.152);
435
- }
436
- }
437
-
438
- .tremolo-slider-scale {
439
- display: block;
440
- position: relative;
441
- }
442
-
443
- .tremolo-slider-scale-option {
444
- color: oklch(25.197% .00003 271.152);
445
- z-index: 10;
446
- flex-direction: column;
447
- justify-content: center;
448
- align-items: center;
449
- display: flex;
450
- position: absolute;
451
- translate: -50%;
452
-
453
- &[data-vertical="true"] {
454
- flex-direction: row;
455
- translate: 0 -50%;
456
- }
457
- }
458
-
459
- .tremolo-slider-scale-option-mark {
460
- background-color: currentColor;
461
- }
462
-
463
- .tremolo-slider-scale-option-label {
464
- text-align: right;
465
- }
466
-
467
- :where(.dark, [data-theme="dark"]) {
468
- & .tremolo-slider-thumb {
469
- --color: oklch(64.5% .17548 266.373);
470
-
471
- &:hover {
472
- --color: oklch(67.5% .17548 266.373);
473
- }
474
- }
475
-
476
- & .tremolo-slider-track {
477
- --active: oklch(59.5% .17548 266.373);
478
- --inactive: oklch(41.7% 0 0);
479
-
480
- &:hover {
481
- --active: oklch(62.5% .17548 266.373);
482
- --inactive: oklch(44.7% 0 0);
483
- }
484
-
485
- &[aria-disabled="true"] {
486
- --active: oklch(75.327% .01237 264.547);
487
- --inactive: oklch(89.755% .0001 271.152);
488
- }
489
- }
490
- }
491
- .tremolo-xy-pad {
492
- cursor: pointer;
493
- display: inline-block;
494
- }
495
-
496
- .tremolo-xy-pad-area {
497
- --color: oklch(95% 0 0);
498
- background-color: var(--color);
499
- position: relative;
500
- }
501
-
502
- .tremolo-xy-pad-thumb-wrapper {
503
- z-index: 100;
504
- position: absolute;
505
- translate: -50% -50%;
506
- }
507
-
508
- .tremolo-xy-pad-thumb {
509
- --color: oklch(59.5% .17548 266.373);
510
- background-color: var(--color);
511
- border-radius: 50%;
512
- outline: none;
513
-
514
- &[aria-disabled="true"] {
515
- background-color: oklch(50.462% .03307 270.021);
516
- }
517
-
518
- &[aria-readonly="false"]:focus {
519
- box-shadow: 0px 0px 0px 3px
520
- color-mix(in srgb, var(--color) 20%, transparent);
521
- }
522
- }
523
-
524
- :where(.dark, [data-theme="dark"]) {
525
- & .tremolo-xy-pad-area {
526
- --color: oklch(41.7% 0 0);
527
- }
528
-
529
- & .tremolo-xy-pad-thumb {
530
- --color: oklch(64.5% .17548 266.373);
531
-
532
- &:hover {
533
- --color: oklch(67.5% .17548 266.373);
534
- }
535
- }
536
- }
package/src/Globals.d.ts DELETED
@@ -1,3 +0,0 @@
1
- declare module '*.css'
2
- declare module '*.module.css'
3
- declare module '*.module.scss'
@@ -1,46 +0,0 @@
1
- // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/save
2
- export const drawingState = [
3
- 'strokeStyle',
4
- 'fillStyle',
5
- 'globalAlpha',
6
- 'lineWidth',
7
- 'lineCap',
8
- 'lineJoin',
9
- 'miterLimit',
10
- 'lineDashOffset',
11
- 'shadowOffsetX',
12
- 'shadowOffsetY',
13
- 'shadowBlur',
14
- 'shadowColor',
15
- 'globalCompositeOperation',
16
- 'font',
17
- 'textAlign',
18
- 'textBaseline',
19
- 'direction',
20
- 'imageSmoothingEnabled',
21
- ] as const
22
-
23
- export type DrawingState = (typeof drawingState)[number]
24
- export type DrawingStateValue = CanvasRenderingContext2D[DrawingState]
25
- export type DrawingContext = Pick<CanvasRenderingContext2D, DrawingState>
26
-
27
- export function isDrawingState(obj: unknown): obj is DrawingState {
28
- const d: string[] = [...drawingState]
29
- return typeof obj == 'string' && d.includes(obj)
30
- }
31
-
32
- export function setDprConfig(
33
- canvas: HTMLCanvasElement,
34
- context: CanvasRenderingContext2D,
35
- width: number,
36
- height: number,
37
- dpr: number,
38
- ) {
39
- canvas.width = width * dpr
40
- canvas.height = height * dpr
41
- // Reset current transformation matrix to the identity matrix
42
- context.setTransform(1, 0, 0, 1, 0, 0)
43
- context.scale(dpr, dpr)
44
- canvas.style.width = `${width}px`
45
- canvas.style.height = `${height}px`
46
- }
@@ -1,77 +0,0 @@
1
- .tremolo-knob {
2
- display: inline-block;
3
- cursor: grab;
4
- overflow: visible;
5
- outline: 0;
6
-
7
- &[aria-readonly='true'] {
8
- cursor: not-allowed;
9
- }
10
-
11
- &[data-dragging='true'] {
12
- cursor: inherit;
13
- }
14
- }
15
-
16
- .tremolo-knob-active-line {
17
- overflow: visible;
18
- color: oklch(69.2% 0.17548 266.373);
19
-
20
- :where(.tremolo-knob:focus, .tremolo-knob:hover) & {
21
- color: oklch(59.5% 0.17548 266.373);
22
- }
23
-
24
- :where(.tremolo-knob[aria-disabled='true']) & {
25
- color: oklch(50.5% 0.03307 270.021);
26
- }
27
- }
28
-
29
- .tremolo-knob-inactive-line {
30
- color: oklch(95% 0 0);
31
-
32
- :where(.tremolo-knob:focus, .tremolo-knob:hover) & {
33
- color: oklch(90% 0 0);
34
- }
35
- }
36
-
37
- .tremolo-knob-thumb {
38
- color: oklch(85.7% 0 0);
39
-
40
- :where(.tremolo-knob:focus, .tremolo-knob:hover) & {
41
- color: oklch(84.5% 0 0);
42
- }
43
- }
44
-
45
- .tremolo-knob-thumb-line {
46
- color: oklch(94.2% 0 0);
47
- }
48
-
49
- :where(.dark, [data-theme='dark']) {
50
- .tremolo-knob-active-line {
51
- color: oklch(59.5% 0.17548 266.373);
52
-
53
- :where(.tremolo-knob:focus, .tremolo-knob:hover) & {
54
- color: oklch(65.2% 0.17548 266.373);
55
- }
56
- }
57
-
58
- .tremolo-knob-inactive-line {
59
- color: oklch(41.7% 0 0);
60
-
61
- :where(.tremolo-knob:focus, .tremolo-knob:hover) & {
62
- color: oklch(44.59% 0 0);
63
- }
64
- }
65
-
66
- .tremolo-knob-thumb {
67
- color: oklch(48.6% 0 0);
68
-
69
- :where(.tremolo-knob:focus, .tremolo-knob:hover) & {
70
- color: oklch(51.7% 0 0);
71
- }
72
- }
73
-
74
- .tremolo-knob-thumb-line {
75
- color: oklch(84.2% 0 0);
76
- }
77
- }