@neo-ui-kit/react 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -4
- package/dist/components/artwork/DatabaseArt/styles.css +58 -58
- package/dist/components/artwork/Landscape/styles.css +79 -79
- package/dist/components/artwork/Planet/styles.css +52 -52
- package/dist/components/artwork/QuantumField/QuantumFieldExperience.d.ts +6 -2
- package/dist/components/artwork/QuantumField/UPSTREAM-LICENSE.txt +21 -21
- package/dist/components/artwork/ServerArt/styles.css +43 -43
- package/dist/components/artwork/Spectrum/styles.css +35 -35
- package/dist/components/controls/Autocomplete/styles.css +1 -1
- package/dist/components/controls/Checkbox/styles.css +58 -58
- package/dist/components/controls/InputBase/styles.css +374 -374
- package/dist/components/controls/Link/styles.css +50 -50
- package/dist/components/controls/SegmentedControl/styles.css +9 -9
- package/dist/components/controls/Switch/styles.css +54 -54
- package/dist/components/controls/Tabs/styles.css +239 -239
- package/dist/components/controls/ToggleButton/styles.css +49 -49
- package/dist/components/controls/shared.css +694 -694
- package/dist/components/editor/shared.css +1 -1
- package/dist/components/effects/Beacon/styles.css +38 -38
- package/dist/components/effects/Equalizer/styles.css +34 -34
- package/dist/components/effects/GlowText/styles.css +56 -56
- package/dist/components/effects/Marquee/styles.css +46 -46
- package/dist/components/effects/Reveal/styles.css +25 -25
- package/dist/components/effects/Shimmer/styles.css +48 -48
- package/dist/components/effects/Sparkles/styles.css +28 -28
- package/dist/components/effects/Spotlight/styles.css +45 -45
- package/dist/components/effects/Tilt/styles.css +67 -67
- package/dist/components/feedback/CollapsibleSection/styles.css +76 -76
- package/dist/components/feedback/DataTable/styles.css +522 -522
- package/dist/components/feedback/EmptyState/styles.css +80 -80
- package/dist/components/feedback/KeyValueList/styles.css +51 -51
- package/dist/components/feedback/MenuItem/styles.css +71 -71
- package/dist/components/feedback/Popover/styles.css +44 -44
- package/dist/components/feedback/Steps/styles.css +152 -152
- package/dist/components/feedback/Toast/styles.css +89 -89
- package/dist/components/forms/FormFields/styles.css +21 -21
- package/dist/components/foundation/ThemeProvider/styles.css +31 -31
- package/dist/components/layout/Avatar/styles.css +151 -151
- package/dist/components/layout/Card/styles.css +37 -37
- package/dist/components/layout/DialogActions/styles.css +31 -31
- package/dist/components/layout/DialogBody/styles.css +17 -17
- package/dist/components/layout/Illustration/styles.css +104 -104
- package/dist/components/layout/ScrollArea/styles.css +61 -61
- package/dist/components/layout/TabPanel/styles.css +16 -16
- package/dist/components/layout/shared.css +65 -65
- package/dist/components/media/AudioPlayer/styles.css +86 -86
- package/dist/components/media/LevelMeter/styles.css +30 -30
- package/dist/components/media/MelodyRoll/styles.css +196 -196
- package/dist/components/media/RotaryKnob/styles.css +319 -319
- package/dist/components/media/Sparkline/styles.css +69 -69
- package/dist/components/media/WaveDecoration/styles.css +1 -1
- package/dist/components/media/shared.css +7 -7
- package/dist/fonts/melodix.css +123 -123
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2106 -2104
- package/dist/theme/base.css +210 -210
- package/package.json +1 -1
|
@@ -1,319 +1,319 @@
|
|
|
1
|
-
/* Styles owned by RotaryKnob. */
|
|
2
|
-
/* Exact CSS geometry from premium-knob-interactive-neon(2).html, scoped to Neo UI. */
|
|
3
|
-
.ad-rotary-knob.knob {
|
|
4
|
-
--size: 13.75rem;
|
|
5
|
-
--angle: 45.9deg;
|
|
6
|
-
--rotation: 0deg;
|
|
7
|
-
position: relative;
|
|
8
|
-
width: min(var(--size), 100%);
|
|
9
|
-
max-width: 100%;
|
|
10
|
-
aspect-ratio: 1;
|
|
11
|
-
flex: none;
|
|
12
|
-
isolation: isolate;
|
|
13
|
-
-webkit-tap-highlight-color: transparent;
|
|
14
|
-
/* Leans towards the pointer in 3D; settles back when it leaves or is grabbed. */
|
|
15
|
-
transform: perspective(60rem) rotateX(var(--tilt-x, 0deg))
|
|
16
|
-
rotateY(var(--tilt-y, 0deg));
|
|
17
|
-
transition: transform 0.5s cubic-bezier(0.2, 0.8, 0.2, 1);
|
|
18
|
-
}
|
|
19
|
-
.ad-rotary-knob.knob::before {
|
|
20
|
-
content: "";
|
|
21
|
-
position: absolute;
|
|
22
|
-
inset: 3.8%;
|
|
23
|
-
border-radius: 50%;
|
|
24
|
-
pointer-events: none;
|
|
25
|
-
background: radial-gradient(
|
|
26
|
-
circle at 50% 50%,
|
|
27
|
-
transparent 58%,
|
|
28
|
-
rgb(from var(--ad-primary) r g b / 0.055) 68%,
|
|
29
|
-
transparent 78%
|
|
30
|
-
);
|
|
31
|
-
box-shadow:
|
|
32
|
-
0 0 1.25rem rgb(from var(--ad-primary) r g b / 0.18),
|
|
33
|
-
0 0 3.25rem rgb(from var(--ad-primary) r g b / 0.12),
|
|
34
|
-
0 0 5.375rem rgb(from var(--ad-primary) r g b / 0.06);
|
|
35
|
-
z-index: -1;
|
|
36
|
-
animation: ad-knob-breathe 5s ease-in-out infinite;
|
|
37
|
-
}
|
|
38
|
-
/* At rest the halo breathes slowly; grabbing the knob wakes it fully. */
|
|
39
|
-
@keyframes ad-knob-breathe {
|
|
40
|
-
50% {
|
|
41
|
-
opacity: 0.6;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
.ad-rotary-knob.is-dragging.knob::before {
|
|
45
|
-
animation: none;
|
|
46
|
-
}
|
|
47
|
-
.ad-rotary-knob.knob::after {
|
|
48
|
-
content: "";
|
|
49
|
-
position: absolute;
|
|
50
|
-
inset: 8.6%;
|
|
51
|
-
border-radius: 50%;
|
|
52
|
-
pointer-events: none;
|
|
53
|
-
border: 0.0625rem solid rgb(from var(--ad-primary) r g b / 0.16);
|
|
54
|
-
box-shadow:
|
|
55
|
-
inset 0 0 0.9375rem rgb(from var(--ad-primary) r g b / 0.12),
|
|
56
|
-
0 0 0.75rem rgb(from var(--ad-primary) r g b / 0.1);
|
|
57
|
-
}
|
|
58
|
-
.ad-rotary-knob .knob__surface {
|
|
59
|
-
display: block;
|
|
60
|
-
position: absolute;
|
|
61
|
-
inset: 0;
|
|
62
|
-
width: 100%;
|
|
63
|
-
height: 100%;
|
|
64
|
-
pointer-events: none;
|
|
65
|
-
filter: hue-rotate(var(--ad-hue-shift, 0deg))
|
|
66
|
-
drop-shadow(0 0 0.4375rem rgb(from var(--ad-primary) r g b / 0.18))
|
|
67
|
-
drop-shadow(0 0 1.25rem rgb(from var(--ad-primary) r g b / 0.1));
|
|
68
|
-
}
|
|
69
|
-
.ad-rotary-knob .knob__control {
|
|
70
|
-
position: absolute;
|
|
71
|
-
inset: 5.5%;
|
|
72
|
-
border-radius: 50%;
|
|
73
|
-
cursor: grab;
|
|
74
|
-
outline: none;
|
|
75
|
-
touch-action: none;
|
|
76
|
-
user-select: none;
|
|
77
|
-
-webkit-user-select: none;
|
|
78
|
-
}
|
|
79
|
-
.ad-rotary-knob .knob__control:active,
|
|
80
|
-
.ad-rotary-knob.is-dragging .knob__control {
|
|
81
|
-
cursor: grabbing;
|
|
82
|
-
}
|
|
83
|
-
.ad-rotary-knob.is-dragging .knob__surface,
|
|
84
|
-
.ad-rotary-knob:hover .knob__surface {
|
|
85
|
-
filter: hue-rotate(var(--ad-hue-shift, 0deg))
|
|
86
|
-
drop-shadow(0 0 0.625rem rgb(from var(--ad-primary) r g b / 0.28))
|
|
87
|
-
drop-shadow(0 0 1.75rem rgb(from var(--ad-primary) r g b / 0.16));
|
|
88
|
-
}
|
|
89
|
-
.ad-rotary-knob .knob__surface {
|
|
90
|
-
transition:
|
|
91
|
-
filter 0.4s ease,
|
|
92
|
-
scale 0.3s cubic-bezier(0.34, 1.56, 0.5, 1);
|
|
93
|
-
}
|
|
94
|
-
/* Depth: the knob stands off the panel and casts a soft shadow; the cap stands off the bezel. */
|
|
95
|
-
.ad-rotary-knob .knob__base {
|
|
96
|
-
filter: hue-rotate(var(--ad-hue-shift, 0deg))
|
|
97
|
-
drop-shadow(0 0.9rem 1.1rem #000c)
|
|
98
|
-
drop-shadow(0 0 0.4375rem rgb(from var(--ad-primary) r g b / 0.18))
|
|
99
|
-
drop-shadow(0 0 1.25rem rgb(from var(--ad-primary) r g b / 0.1));
|
|
100
|
-
}
|
|
101
|
-
.ad-rotary-knob .knob__rotor-frame {
|
|
102
|
-
overflow: clip;
|
|
103
|
-
filter: hue-rotate(var(--ad-hue-shift, 0deg))
|
|
104
|
-
drop-shadow(0 0.35rem 0.45rem #000b);
|
|
105
|
-
}
|
|
106
|
-
.ad-rotary-knob .knob__rotor {
|
|
107
|
-
display: block;
|
|
108
|
-
width: 100%;
|
|
109
|
-
height: 100%;
|
|
110
|
-
transform: rotate(var(--rotation));
|
|
111
|
-
transform-origin: center;
|
|
112
|
-
will-change: transform;
|
|
113
|
-
}
|
|
114
|
-
/* Grabbed, the cap sinks a touch into the panel. */
|
|
115
|
-
.ad-rotary-knob.is-dragging .knob__rotor,
|
|
116
|
-
.ad-rotary-knob.is-dragging .knob__sheen {
|
|
117
|
-
scale: 0.975;
|
|
118
|
-
}
|
|
119
|
-
/* Fixed studio lights on the cap: the brushed metal turns, its highlights stay put. */
|
|
120
|
-
.ad-rotary-knob .knob__sheen {
|
|
121
|
-
position: absolute;
|
|
122
|
-
inset: 18.7%;
|
|
123
|
-
border-radius: 50%;
|
|
124
|
-
pointer-events: none;
|
|
125
|
-
background:
|
|
126
|
-
radial-gradient(circle at 34% 26%, #ffffff2e, transparent 42%),
|
|
127
|
-
conic-gradient(
|
|
128
|
-
from 0deg,
|
|
129
|
-
transparent 0deg,
|
|
130
|
-
#ffffff14 30deg,
|
|
131
|
-
transparent 70deg,
|
|
132
|
-
transparent 150deg,
|
|
133
|
-
rgb(from var(--ad-secondary) r g b / 0.07) 200deg,
|
|
134
|
-
transparent 240deg,
|
|
135
|
-
transparent 300deg,
|
|
136
|
-
#ffffff10 330deg,
|
|
137
|
-
transparent 360deg
|
|
138
|
-
);
|
|
139
|
-
box-shadow:
|
|
140
|
-
inset 0 0.0625rem 0.0625rem #ffffff2a,
|
|
141
|
-
inset 0 -0.25rem 0.75rem #0009;
|
|
142
|
-
mix-blend-mode: screen;
|
|
143
|
-
transition: scale 0.3s cubic-bezier(0.34, 1.56, 0.5, 1);
|
|
144
|
-
}
|
|
145
|
-
/* The value sits in the scale's dead zone at the bottom, like a hardware display;
|
|
146
|
-
click it to type a number. */
|
|
147
|
-
.ad-rotary-knob .knob__value,
|
|
148
|
-
.ad-rotary-knob .knob__input {
|
|
149
|
-
position: absolute;
|
|
150
|
-
left: 50%;
|
|
151
|
-
bottom: 2.5%;
|
|
152
|
-
translate: -50% 0;
|
|
153
|
-
min-width: 3.4em;
|
|
154
|
-
padding: 0.12em 0.45em;
|
|
155
|
-
border-radius: 0.4em;
|
|
156
|
-
color: var(--ad-neutral-200);
|
|
157
|
-
font: 600 max(0.625rem, calc(var(--size) * 0.068)) / 1.2
|
|
158
|
-
var(--ad-font-family-mono, monospace);
|
|
159
|
-
font-variant-numeric: tabular-nums;
|
|
160
|
-
text-align: center;
|
|
161
|
-
text-shadow:
|
|
162
|
-
0 0 0.3125rem var(--ad-neutral-200),
|
|
163
|
-
0 0 0.875rem var(--ad-primary);
|
|
164
|
-
background: linear-gradient(rgb(from var(--ad-neutral-900) r g b / 0.9), rgb(from var(--ad-neutral-850) r g b / 0.9));
|
|
165
|
-
box-shadow:
|
|
166
|
-
inset 0 0 0 0.0625rem rgb(from var(--ad-primary) r g b / 0.24),
|
|
167
|
-
inset 0 0.0625rem 0 #ffffff14,
|
|
168
|
-
0 0.25rem 0.75rem #0009;
|
|
169
|
-
transition:
|
|
170
|
-
box-shadow 0.25s,
|
|
171
|
-
color 0.25s;
|
|
172
|
-
}
|
|
173
|
-
.ad-rotary-knob .knob__value[data-editable] {
|
|
174
|
-
cursor: text;
|
|
175
|
-
}
|
|
176
|
-
.ad-rotary-knob .knob__value[data-editable]:hover {
|
|
177
|
-
box-shadow:
|
|
178
|
-
inset 0 0 0 0.0625rem rgb(from var(--ad-secondary) r g b / 0.67),
|
|
179
|
-
inset 0 0.0625rem 0 #ffffff1f,
|
|
180
|
-
0 0 0.9rem rgb(from var(--ad-primary) r g b / 0.33);
|
|
181
|
-
}
|
|
182
|
-
.ad-rotary-knob .knob__value[data-editing] {
|
|
183
|
-
visibility: hidden;
|
|
184
|
-
}
|
|
185
|
-
.ad-rotary-knob .knob__input {
|
|
186
|
-
width: 3.4em;
|
|
187
|
-
border: 0;
|
|
188
|
-
outline: none;
|
|
189
|
-
box-shadow:
|
|
190
|
-
inset 0 0 0 0.0625rem var(--ad-secondary),
|
|
191
|
-
0 0 1rem rgb(from var(--ad-primary) r g b / 0.47);
|
|
192
|
-
caret-color: #fff;
|
|
193
|
-
}
|
|
194
|
-
.ad-rotary-knob[data-ad-size="xs"] .knob__value,
|
|
195
|
-
.ad-rotary-knob[data-ad-size="xs"] .knob__input {
|
|
196
|
-
bottom: -0.4em;
|
|
197
|
-
}
|
|
198
|
-
.ad-rotary-knob .knob__control:focus-visible::after {
|
|
199
|
-
content: "";
|
|
200
|
-
position: absolute;
|
|
201
|
-
inset: -2%;
|
|
202
|
-
border: 0.125rem solid var(--ad-secondary);
|
|
203
|
-
border-radius: inherit;
|
|
204
|
-
box-shadow: 0 0 0.75rem rgb(from var(--ad-primary) r g b / 0.27);
|
|
205
|
-
pointer-events: none;
|
|
206
|
-
filter: drop-shadow(0 0 0.4375rem rgb(from var(--ad-primary) r g b / 0.18))
|
|
207
|
-
drop-shadow(0 0 1.25rem rgb(from var(--ad-primary) r g b / 0.1));
|
|
208
|
-
}
|
|
209
|
-
.ad-rotary-knob .knob__indicator {
|
|
210
|
-
position: absolute;
|
|
211
|
-
inset: 0;
|
|
212
|
-
border-radius: 50%;
|
|
213
|
-
pointer-events: none;
|
|
214
|
-
}
|
|
215
|
-
.ad-rotary-knob .knob__slot {
|
|
216
|
-
position: absolute;
|
|
217
|
-
left: 48.4%;
|
|
218
|
-
top: 16.65%;
|
|
219
|
-
width: 3.2%;
|
|
220
|
-
height: 11.25%;
|
|
221
|
-
/* Orbit the small marker around the control's centre; rotating its full-size
|
|
222
|
-
invisible wrapper would enlarge the container's scrollable bounds. */
|
|
223
|
-
transform: rotate(var(--angle));
|
|
224
|
-
transform-origin: 50% calc(100% * (50 - 16.65) / 11.25);
|
|
225
|
-
will-change: transform;
|
|
226
|
-
border-radius: 62.4375rem;
|
|
227
|
-
background: linear-gradient(
|
|
228
|
-
90deg,
|
|
229
|
-
var(--ad-neutral-950) 0%,
|
|
230
|
-
var(--ad-primary-900) 25%,
|
|
231
|
-
var(--ad-primary-800) 66%,
|
|
232
|
-
var(--ad-primary-900) 100%
|
|
233
|
-
);
|
|
234
|
-
box-shadow:
|
|
235
|
-
0 0 0 0.0625rem var(--ad-primary-900),
|
|
236
|
-
0 0.0625rem 0.0625rem 0.0625rem rgb(from var(--ad-secondary) r g b / 0.5),
|
|
237
|
-
inset 0.0625rem 0.1875rem 0.3125rem #000,
|
|
238
|
-
0 0 0.625rem 0.1875rem rgb(from var(--ad-primary) r g b / 0.38),
|
|
239
|
-
0 0 1.5rem 0.375rem rgb(from var(--ad-primary) r g b / 0.16);
|
|
240
|
-
}
|
|
241
|
-
.ad-rotary-knob .knob__slot::before {
|
|
242
|
-
content: "";
|
|
243
|
-
position: absolute;
|
|
244
|
-
inset: 9% 20%;
|
|
245
|
-
border-radius: inherit;
|
|
246
|
-
background: linear-gradient(
|
|
247
|
-
90deg,
|
|
248
|
-
var(--ad-primary) 0%,
|
|
249
|
-
var(--ad-secondary) 17%,
|
|
250
|
-
var(--ad-neutral-200) 47%,
|
|
251
|
-
#fff 62%,
|
|
252
|
-
var(--ad-secondary) 85%,
|
|
253
|
-
var(--ad-primary) 100%
|
|
254
|
-
);
|
|
255
|
-
box-shadow:
|
|
256
|
-
0 0 0.125rem 0.0625rem var(--ad-neutral-200),
|
|
257
|
-
0 0 0.3125rem 0.125rem var(--ad-primary),
|
|
258
|
-
0 0 0.875rem 0.25rem rgb(from var(--ad-primary) r g b / 0.82),
|
|
259
|
-
0 0 1.875rem 0.5rem rgb(from var(--ad-primary) r g b / 0.38),
|
|
260
|
-
0 0 3.375rem 0.75rem rgb(from var(--ad-primary) r g b / 0.16);
|
|
261
|
-
}
|
|
262
|
-
.ad-rotary-knob .knob__slot::after {
|
|
263
|
-
content: "";
|
|
264
|
-
position: absolute;
|
|
265
|
-
inset: -7% -40%;
|
|
266
|
-
border-radius: 50%;
|
|
267
|
-
background: radial-gradient(ellipse, rgb(from var(--ad-primary) r g b / 0.08) 20%, transparent 72%);
|
|
268
|
-
}
|
|
269
|
-
.ad-rotary-knob[data-disabled="true"] {
|
|
270
|
-
opacity: 0.45;
|
|
271
|
-
filter: saturate(0.55);
|
|
272
|
-
pointer-events: none;
|
|
273
|
-
}
|
|
274
|
-
.ad-rotary-knob[data-readonly="true"] .knob__control {
|
|
275
|
-
cursor: default;
|
|
276
|
-
}
|
|
277
|
-
.ad-sr-only {
|
|
278
|
-
position: absolute !important;
|
|
279
|
-
width: 0.0625rem !important;
|
|
280
|
-
height: 0.0625rem !important;
|
|
281
|
-
padding: 0 !important;
|
|
282
|
-
margin: -0.0625rem !important;
|
|
283
|
-
overflow: hidden !important;
|
|
284
|
-
clip-path: inset(50%) !important;
|
|
285
|
-
white-space: nowrap !important;
|
|
286
|
-
border: 0 !important;
|
|
287
|
-
}
|
|
288
|
-
@media (prefers-reduced-motion: reduce) {
|
|
289
|
-
.ad-rotary-knob .knob__indicator,
|
|
290
|
-
.ad-rotary-knob .knob__rotor {
|
|
291
|
-
will-change: auto;
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
/* Hover and grab brighten the glow but keep the depth shadows. */
|
|
295
|
-
.ad-rotary-knob:is(:hover, .is-dragging) .knob__base {
|
|
296
|
-
filter: hue-rotate(var(--ad-hue-shift, 0deg))
|
|
297
|
-
drop-shadow(0 0.9rem 1.1rem #000c)
|
|
298
|
-
drop-shadow(0 0 0.625rem rgb(from var(--ad-primary) r g b / 0.28))
|
|
299
|
-
drop-shadow(0 0 1.75rem rgb(from var(--ad-primary) r g b / 0.16));
|
|
300
|
-
}
|
|
301
|
-
.ad-rotary-knob:is(:hover, .is-dragging) .knob__rotor {
|
|
302
|
-
filter: hue-rotate(var(--ad-hue-shift, 0deg))
|
|
303
|
-
drop-shadow(0 0.35rem 0.45rem #000b);
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
/* A printed label under the knob; the knob keeps room for it below. */
|
|
307
|
-
.ad-rotary-knob.knob[data-labelled] {
|
|
308
|
-
margin-block-end: 1.6em;
|
|
309
|
-
}
|
|
310
|
-
.ad-rotary-knob .knob__label {
|
|
311
|
-
position: absolute;
|
|
312
|
-
top: 100%;
|
|
313
|
-
left: 50%;
|
|
314
|
-
translate: -50% 0.4em;
|
|
315
|
-
color: var(--ad-muted);
|
|
316
|
-
font-size: var(--ad-font-size-caption);
|
|
317
|
-
white-space: nowrap;
|
|
318
|
-
pointer-events: none;
|
|
319
|
-
}
|
|
1
|
+
/* Styles owned by RotaryKnob. */
|
|
2
|
+
/* Exact CSS geometry from premium-knob-interactive-neon(2).html, scoped to Neo UI. */
|
|
3
|
+
.ad-rotary-knob.knob {
|
|
4
|
+
--size: 13.75rem;
|
|
5
|
+
--angle: 45.9deg;
|
|
6
|
+
--rotation: 0deg;
|
|
7
|
+
position: relative;
|
|
8
|
+
width: min(var(--size), 100%);
|
|
9
|
+
max-width: 100%;
|
|
10
|
+
aspect-ratio: 1;
|
|
11
|
+
flex: none;
|
|
12
|
+
isolation: isolate;
|
|
13
|
+
-webkit-tap-highlight-color: transparent;
|
|
14
|
+
/* Leans towards the pointer in 3D; settles back when it leaves or is grabbed. */
|
|
15
|
+
transform: perspective(60rem) rotateX(var(--tilt-x, 0deg))
|
|
16
|
+
rotateY(var(--tilt-y, 0deg));
|
|
17
|
+
transition: transform 0.5s cubic-bezier(0.2, 0.8, 0.2, 1);
|
|
18
|
+
}
|
|
19
|
+
.ad-rotary-knob.knob::before {
|
|
20
|
+
content: "";
|
|
21
|
+
position: absolute;
|
|
22
|
+
inset: 3.8%;
|
|
23
|
+
border-radius: 50%;
|
|
24
|
+
pointer-events: none;
|
|
25
|
+
background: radial-gradient(
|
|
26
|
+
circle at 50% 50%,
|
|
27
|
+
transparent 58%,
|
|
28
|
+
rgb(from var(--ad-primary) r g b / 0.055) 68%,
|
|
29
|
+
transparent 78%
|
|
30
|
+
);
|
|
31
|
+
box-shadow:
|
|
32
|
+
0 0 1.25rem rgb(from var(--ad-primary) r g b / 0.18),
|
|
33
|
+
0 0 3.25rem rgb(from var(--ad-primary) r g b / 0.12),
|
|
34
|
+
0 0 5.375rem rgb(from var(--ad-primary) r g b / 0.06);
|
|
35
|
+
z-index: -1;
|
|
36
|
+
animation: ad-knob-breathe 5s ease-in-out infinite;
|
|
37
|
+
}
|
|
38
|
+
/* At rest the halo breathes slowly; grabbing the knob wakes it fully. */
|
|
39
|
+
@keyframes ad-knob-breathe {
|
|
40
|
+
50% {
|
|
41
|
+
opacity: 0.6;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
.ad-rotary-knob.is-dragging.knob::before {
|
|
45
|
+
animation: none;
|
|
46
|
+
}
|
|
47
|
+
.ad-rotary-knob.knob::after {
|
|
48
|
+
content: "";
|
|
49
|
+
position: absolute;
|
|
50
|
+
inset: 8.6%;
|
|
51
|
+
border-radius: 50%;
|
|
52
|
+
pointer-events: none;
|
|
53
|
+
border: 0.0625rem solid rgb(from var(--ad-primary) r g b / 0.16);
|
|
54
|
+
box-shadow:
|
|
55
|
+
inset 0 0 0.9375rem rgb(from var(--ad-primary) r g b / 0.12),
|
|
56
|
+
0 0 0.75rem rgb(from var(--ad-primary) r g b / 0.1);
|
|
57
|
+
}
|
|
58
|
+
.ad-rotary-knob .knob__surface {
|
|
59
|
+
display: block;
|
|
60
|
+
position: absolute;
|
|
61
|
+
inset: 0;
|
|
62
|
+
width: 100%;
|
|
63
|
+
height: 100%;
|
|
64
|
+
pointer-events: none;
|
|
65
|
+
filter: hue-rotate(var(--ad-hue-shift, 0deg))
|
|
66
|
+
drop-shadow(0 0 0.4375rem rgb(from var(--ad-primary) r g b / 0.18))
|
|
67
|
+
drop-shadow(0 0 1.25rem rgb(from var(--ad-primary) r g b / 0.1));
|
|
68
|
+
}
|
|
69
|
+
.ad-rotary-knob .knob__control {
|
|
70
|
+
position: absolute;
|
|
71
|
+
inset: 5.5%;
|
|
72
|
+
border-radius: 50%;
|
|
73
|
+
cursor: grab;
|
|
74
|
+
outline: none;
|
|
75
|
+
touch-action: none;
|
|
76
|
+
user-select: none;
|
|
77
|
+
-webkit-user-select: none;
|
|
78
|
+
}
|
|
79
|
+
.ad-rotary-knob .knob__control:active,
|
|
80
|
+
.ad-rotary-knob.is-dragging .knob__control {
|
|
81
|
+
cursor: grabbing;
|
|
82
|
+
}
|
|
83
|
+
.ad-rotary-knob.is-dragging .knob__surface,
|
|
84
|
+
.ad-rotary-knob:hover .knob__surface {
|
|
85
|
+
filter: hue-rotate(var(--ad-hue-shift, 0deg))
|
|
86
|
+
drop-shadow(0 0 0.625rem rgb(from var(--ad-primary) r g b / 0.28))
|
|
87
|
+
drop-shadow(0 0 1.75rem rgb(from var(--ad-primary) r g b / 0.16));
|
|
88
|
+
}
|
|
89
|
+
.ad-rotary-knob .knob__surface {
|
|
90
|
+
transition:
|
|
91
|
+
filter 0.4s ease,
|
|
92
|
+
scale 0.3s cubic-bezier(0.34, 1.56, 0.5, 1);
|
|
93
|
+
}
|
|
94
|
+
/* Depth: the knob stands off the panel and casts a soft shadow; the cap stands off the bezel. */
|
|
95
|
+
.ad-rotary-knob .knob__base {
|
|
96
|
+
filter: hue-rotate(var(--ad-hue-shift, 0deg))
|
|
97
|
+
drop-shadow(0 0.9rem 1.1rem #000c)
|
|
98
|
+
drop-shadow(0 0 0.4375rem rgb(from var(--ad-primary) r g b / 0.18))
|
|
99
|
+
drop-shadow(0 0 1.25rem rgb(from var(--ad-primary) r g b / 0.1));
|
|
100
|
+
}
|
|
101
|
+
.ad-rotary-knob .knob__rotor-frame {
|
|
102
|
+
overflow: clip;
|
|
103
|
+
filter: hue-rotate(var(--ad-hue-shift, 0deg))
|
|
104
|
+
drop-shadow(0 0.35rem 0.45rem #000b);
|
|
105
|
+
}
|
|
106
|
+
.ad-rotary-knob .knob__rotor {
|
|
107
|
+
display: block;
|
|
108
|
+
width: 100%;
|
|
109
|
+
height: 100%;
|
|
110
|
+
transform: rotate(var(--rotation));
|
|
111
|
+
transform-origin: center;
|
|
112
|
+
will-change: transform;
|
|
113
|
+
}
|
|
114
|
+
/* Grabbed, the cap sinks a touch into the panel. */
|
|
115
|
+
.ad-rotary-knob.is-dragging .knob__rotor,
|
|
116
|
+
.ad-rotary-knob.is-dragging .knob__sheen {
|
|
117
|
+
scale: 0.975;
|
|
118
|
+
}
|
|
119
|
+
/* Fixed studio lights on the cap: the brushed metal turns, its highlights stay put. */
|
|
120
|
+
.ad-rotary-knob .knob__sheen {
|
|
121
|
+
position: absolute;
|
|
122
|
+
inset: 18.7%;
|
|
123
|
+
border-radius: 50%;
|
|
124
|
+
pointer-events: none;
|
|
125
|
+
background:
|
|
126
|
+
radial-gradient(circle at 34% 26%, #ffffff2e, transparent 42%),
|
|
127
|
+
conic-gradient(
|
|
128
|
+
from 0deg,
|
|
129
|
+
transparent 0deg,
|
|
130
|
+
#ffffff14 30deg,
|
|
131
|
+
transparent 70deg,
|
|
132
|
+
transparent 150deg,
|
|
133
|
+
rgb(from var(--ad-secondary) r g b / 0.07) 200deg,
|
|
134
|
+
transparent 240deg,
|
|
135
|
+
transparent 300deg,
|
|
136
|
+
#ffffff10 330deg,
|
|
137
|
+
transparent 360deg
|
|
138
|
+
);
|
|
139
|
+
box-shadow:
|
|
140
|
+
inset 0 0.0625rem 0.0625rem #ffffff2a,
|
|
141
|
+
inset 0 -0.25rem 0.75rem #0009;
|
|
142
|
+
mix-blend-mode: screen;
|
|
143
|
+
transition: scale 0.3s cubic-bezier(0.34, 1.56, 0.5, 1);
|
|
144
|
+
}
|
|
145
|
+
/* The value sits in the scale's dead zone at the bottom, like a hardware display;
|
|
146
|
+
click it to type a number. */
|
|
147
|
+
.ad-rotary-knob .knob__value,
|
|
148
|
+
.ad-rotary-knob .knob__input {
|
|
149
|
+
position: absolute;
|
|
150
|
+
left: 50%;
|
|
151
|
+
bottom: 2.5%;
|
|
152
|
+
translate: -50% 0;
|
|
153
|
+
min-width: 3.4em;
|
|
154
|
+
padding: 0.12em 0.45em;
|
|
155
|
+
border-radius: 0.4em;
|
|
156
|
+
color: var(--ad-neutral-200);
|
|
157
|
+
font: 600 max(0.625rem, calc(var(--size) * 0.068)) / 1.2
|
|
158
|
+
var(--ad-font-family-mono, monospace);
|
|
159
|
+
font-variant-numeric: tabular-nums;
|
|
160
|
+
text-align: center;
|
|
161
|
+
text-shadow:
|
|
162
|
+
0 0 0.3125rem var(--ad-neutral-200),
|
|
163
|
+
0 0 0.875rem var(--ad-primary);
|
|
164
|
+
background: linear-gradient(rgb(from var(--ad-neutral-900) r g b / 0.9), rgb(from var(--ad-neutral-850) r g b / 0.9));
|
|
165
|
+
box-shadow:
|
|
166
|
+
inset 0 0 0 0.0625rem rgb(from var(--ad-primary) r g b / 0.24),
|
|
167
|
+
inset 0 0.0625rem 0 #ffffff14,
|
|
168
|
+
0 0.25rem 0.75rem #0009;
|
|
169
|
+
transition:
|
|
170
|
+
box-shadow 0.25s,
|
|
171
|
+
color 0.25s;
|
|
172
|
+
}
|
|
173
|
+
.ad-rotary-knob .knob__value[data-editable] {
|
|
174
|
+
cursor: text;
|
|
175
|
+
}
|
|
176
|
+
.ad-rotary-knob .knob__value[data-editable]:hover {
|
|
177
|
+
box-shadow:
|
|
178
|
+
inset 0 0 0 0.0625rem rgb(from var(--ad-secondary) r g b / 0.67),
|
|
179
|
+
inset 0 0.0625rem 0 #ffffff1f,
|
|
180
|
+
0 0 0.9rem rgb(from var(--ad-primary) r g b / 0.33);
|
|
181
|
+
}
|
|
182
|
+
.ad-rotary-knob .knob__value[data-editing] {
|
|
183
|
+
visibility: hidden;
|
|
184
|
+
}
|
|
185
|
+
.ad-rotary-knob .knob__input {
|
|
186
|
+
width: 3.4em;
|
|
187
|
+
border: 0;
|
|
188
|
+
outline: none;
|
|
189
|
+
box-shadow:
|
|
190
|
+
inset 0 0 0 0.0625rem var(--ad-secondary),
|
|
191
|
+
0 0 1rem rgb(from var(--ad-primary) r g b / 0.47);
|
|
192
|
+
caret-color: #fff;
|
|
193
|
+
}
|
|
194
|
+
.ad-rotary-knob[data-ad-size="xs"] .knob__value,
|
|
195
|
+
.ad-rotary-knob[data-ad-size="xs"] .knob__input {
|
|
196
|
+
bottom: -0.4em;
|
|
197
|
+
}
|
|
198
|
+
.ad-rotary-knob .knob__control:focus-visible::after {
|
|
199
|
+
content: "";
|
|
200
|
+
position: absolute;
|
|
201
|
+
inset: -2%;
|
|
202
|
+
border: 0.125rem solid var(--ad-secondary);
|
|
203
|
+
border-radius: inherit;
|
|
204
|
+
box-shadow: 0 0 0.75rem rgb(from var(--ad-primary) r g b / 0.27);
|
|
205
|
+
pointer-events: none;
|
|
206
|
+
filter: drop-shadow(0 0 0.4375rem rgb(from var(--ad-primary) r g b / 0.18))
|
|
207
|
+
drop-shadow(0 0 1.25rem rgb(from var(--ad-primary) r g b / 0.1));
|
|
208
|
+
}
|
|
209
|
+
.ad-rotary-knob .knob__indicator {
|
|
210
|
+
position: absolute;
|
|
211
|
+
inset: 0;
|
|
212
|
+
border-radius: 50%;
|
|
213
|
+
pointer-events: none;
|
|
214
|
+
}
|
|
215
|
+
.ad-rotary-knob .knob__slot {
|
|
216
|
+
position: absolute;
|
|
217
|
+
left: 48.4%;
|
|
218
|
+
top: 16.65%;
|
|
219
|
+
width: 3.2%;
|
|
220
|
+
height: 11.25%;
|
|
221
|
+
/* Orbit the small marker around the control's centre; rotating its full-size
|
|
222
|
+
invisible wrapper would enlarge the container's scrollable bounds. */
|
|
223
|
+
transform: rotate(var(--angle));
|
|
224
|
+
transform-origin: 50% calc(100% * (50 - 16.65) / 11.25);
|
|
225
|
+
will-change: transform;
|
|
226
|
+
border-radius: 62.4375rem;
|
|
227
|
+
background: linear-gradient(
|
|
228
|
+
90deg,
|
|
229
|
+
var(--ad-neutral-950) 0%,
|
|
230
|
+
var(--ad-primary-900) 25%,
|
|
231
|
+
var(--ad-primary-800) 66%,
|
|
232
|
+
var(--ad-primary-900) 100%
|
|
233
|
+
);
|
|
234
|
+
box-shadow:
|
|
235
|
+
0 0 0 0.0625rem var(--ad-primary-900),
|
|
236
|
+
0 0.0625rem 0.0625rem 0.0625rem rgb(from var(--ad-secondary) r g b / 0.5),
|
|
237
|
+
inset 0.0625rem 0.1875rem 0.3125rem #000,
|
|
238
|
+
0 0 0.625rem 0.1875rem rgb(from var(--ad-primary) r g b / 0.38),
|
|
239
|
+
0 0 1.5rem 0.375rem rgb(from var(--ad-primary) r g b / 0.16);
|
|
240
|
+
}
|
|
241
|
+
.ad-rotary-knob .knob__slot::before {
|
|
242
|
+
content: "";
|
|
243
|
+
position: absolute;
|
|
244
|
+
inset: 9% 20%;
|
|
245
|
+
border-radius: inherit;
|
|
246
|
+
background: linear-gradient(
|
|
247
|
+
90deg,
|
|
248
|
+
var(--ad-primary) 0%,
|
|
249
|
+
var(--ad-secondary) 17%,
|
|
250
|
+
var(--ad-neutral-200) 47%,
|
|
251
|
+
#fff 62%,
|
|
252
|
+
var(--ad-secondary) 85%,
|
|
253
|
+
var(--ad-primary) 100%
|
|
254
|
+
);
|
|
255
|
+
box-shadow:
|
|
256
|
+
0 0 0.125rem 0.0625rem var(--ad-neutral-200),
|
|
257
|
+
0 0 0.3125rem 0.125rem var(--ad-primary),
|
|
258
|
+
0 0 0.875rem 0.25rem rgb(from var(--ad-primary) r g b / 0.82),
|
|
259
|
+
0 0 1.875rem 0.5rem rgb(from var(--ad-primary) r g b / 0.38),
|
|
260
|
+
0 0 3.375rem 0.75rem rgb(from var(--ad-primary) r g b / 0.16);
|
|
261
|
+
}
|
|
262
|
+
.ad-rotary-knob .knob__slot::after {
|
|
263
|
+
content: "";
|
|
264
|
+
position: absolute;
|
|
265
|
+
inset: -7% -40%;
|
|
266
|
+
border-radius: 50%;
|
|
267
|
+
background: radial-gradient(ellipse, rgb(from var(--ad-primary) r g b / 0.08) 20%, transparent 72%);
|
|
268
|
+
}
|
|
269
|
+
.ad-rotary-knob[data-disabled="true"] {
|
|
270
|
+
opacity: 0.45;
|
|
271
|
+
filter: saturate(0.55);
|
|
272
|
+
pointer-events: none;
|
|
273
|
+
}
|
|
274
|
+
.ad-rotary-knob[data-readonly="true"] .knob__control {
|
|
275
|
+
cursor: default;
|
|
276
|
+
}
|
|
277
|
+
.ad-sr-only {
|
|
278
|
+
position: absolute !important;
|
|
279
|
+
width: 0.0625rem !important;
|
|
280
|
+
height: 0.0625rem !important;
|
|
281
|
+
padding: 0 !important;
|
|
282
|
+
margin: -0.0625rem !important;
|
|
283
|
+
overflow: hidden !important;
|
|
284
|
+
clip-path: inset(50%) !important;
|
|
285
|
+
white-space: nowrap !important;
|
|
286
|
+
border: 0 !important;
|
|
287
|
+
}
|
|
288
|
+
@media (prefers-reduced-motion: reduce) {
|
|
289
|
+
.ad-rotary-knob .knob__indicator,
|
|
290
|
+
.ad-rotary-knob .knob__rotor {
|
|
291
|
+
will-change: auto;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/* Hover and grab brighten the glow but keep the depth shadows. */
|
|
295
|
+
.ad-rotary-knob:is(:hover, .is-dragging) .knob__base {
|
|
296
|
+
filter: hue-rotate(var(--ad-hue-shift, 0deg))
|
|
297
|
+
drop-shadow(0 0.9rem 1.1rem #000c)
|
|
298
|
+
drop-shadow(0 0 0.625rem rgb(from var(--ad-primary) r g b / 0.28))
|
|
299
|
+
drop-shadow(0 0 1.75rem rgb(from var(--ad-primary) r g b / 0.16));
|
|
300
|
+
}
|
|
301
|
+
.ad-rotary-knob:is(:hover, .is-dragging) .knob__rotor {
|
|
302
|
+
filter: hue-rotate(var(--ad-hue-shift, 0deg))
|
|
303
|
+
drop-shadow(0 0.35rem 0.45rem #000b);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/* A printed label under the knob; the knob keeps room for it below. */
|
|
307
|
+
.ad-rotary-knob.knob[data-labelled] {
|
|
308
|
+
margin-block-end: 1.6em;
|
|
309
|
+
}
|
|
310
|
+
.ad-rotary-knob .knob__label {
|
|
311
|
+
position: absolute;
|
|
312
|
+
top: 100%;
|
|
313
|
+
left: 50%;
|
|
314
|
+
translate: -50% 0.4em;
|
|
315
|
+
color: var(--ad-muted);
|
|
316
|
+
font-size: var(--ad-font-size-caption);
|
|
317
|
+
white-space: nowrap;
|
|
318
|
+
pointer-events: none;
|
|
319
|
+
}
|